比较JSON与XML

课后整理 2020-12-20

与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两种数据格式,具有下面几点不同。