与XML 相比,JSON 有很多优点,它是高性能Ajax的基石。下面通过示例进行比较。
【示例1】对于下面这个XML文档,如果想获取其中的数据,则必须先定义XML DOM对象,加载XML文档,然后再利用该对象所提供的方法和属性来遍历结构并逐一读取每个节点包含的数据,整个操作过程非常烦琐,而且还要考虑浏览器兼容性问题。
<?xml version="1.0" encoding="utf-8"?> <bookstore> <book> <title lang="cn">XPath语言基础</title> <author>w3c</author> <date>2017</date> <price>30.5</price> </book> <book> <title lang="en">精通XPath</title> <author>css2</author> <date>2017</date> <price>50</price> </book> </bookstore>
如果使用JSON数据表示,则如下所示。
[ { "title" : [ { "lang" : "cn"}, "XPath语言基础" ], "author" : "w3c", "date" : "2017", "price" : 30.5 }, { "title" : [ {"lang" : "en"}, "精通XPath" ], "author" : "css2", "date" : "2017", "price" : 50 } ]
直观比较,很显然JSON数据更简洁,它没有很多元素名,数据传输量当然就小很多。这仅是一个优势,更重要的是,这种格式与JavaScript语言的语法规则相一致,因此可以在JavaScript脚本中直接读取数据。
【示例2】在下面脚本中,把上面示例中JSON数据传递给变量books,此时books就是一个数组,读取第一个元素的值正好是一个对象直接量,然后以点语法读取对象中的title属性值,该属性值又是一个数组,再读取该数组的第2个元素的值,就会返回第一本书的名称。
<script> var books = [ {"title" : [{"lang" : "cn"}, "XPath语言基础"], "author" : "w3c","date" : "2017", "price" : 30.5}, {"title" : [{"lang" : "en"}, "精通XPath"], "author" : "css2", "date" :"2017", "price" : 50} ] alert(books[0].title[1]); // 返回字符串"XPath语言基础" </script>
【示例3】对于下面XML结构数据。
<?xml version="1.0" encoding="utf-8"?> <bookstore> <book> <title lang="cn">XPath语言基础</title> <author>w3c</author> <date>2017</date> <price>30.5</price> </book> <book> <title lang="en">精通XPath</title> <author>w3c</author> <date>2017</date> <price>50</price> </book> </bookstore>
可以转换成JSON格式数据来表示。
{ "author" : "w3c", "date" : "2017", "book" : [{ "title" : [{"lang" : "cn"},"XPath语言基础"], "price" : 30.5 }, { "title" : [{"lang" : "en"},"精通XPath"], "price" : 50 }] }
其中把两组数据中相同项提取出来单独显示,这样当把它赋值给变量books之后,该变量就是一个对象变量,而不是一个数组变量了,引用其中的数据如下。
alert(books.book[0].title[1]); // 返回字符串"XPath语言基础"
上面实例演示了使用JSON格式处理数据的形式是灵活多变的。因此,比较XML和JSON两种数据格式,具有下面几点不同。
- 可读性:两者都具有很强的可读性。XML数据严格遵循XML DOM模型规范,而JSON严格遵循JavaScript语法。
- 可扩展性:都具有超强的扩展性。XML数据通过自定义标签,可以设计更复杂的数据嵌套结构,而JSON可以通过数组和对象的嵌套组合也能够模拟任意XML数据结构。
- 编码难度:XML有丰富的编码工具(如Dom4j、JDom等),JSON也有json.org提供的工具。但是JSON编码比XML明显容易,即使不借助工具也可以手写JSON代码,但是要手写XML文档就非常困难。
- 解码难度:XML数据解析需要考虑结构层次,以及节点关系,解析难度大,而JSON数据不存在解析难度。