xml和json的区别

说到xlm的诞生就不得不说一下“标准通用标记语言SGML(Standerd Generalized Markup Language)”

一,SGML

说到XML的诞生就不得不说一下“标准通用标记语言SGML(Standerd Generalized Markup Language)”

一个SGML语言由三部分组成:SGML语法定义;DTD文件类型;文件实例;
特点:复杂 庞大 难以应用,所以没有被推广

二,HTML

超文本标记语言HTML(HyperText Markup Language )

诞生:它是SGML的一个文件实例
特点:语法简单 精炼 易掌握 所以得以普及;但是它也有缺点:比如对超级链接支持不足,缺乏空间立体描述,处理图形、图像、音频、视频等多媒体能力较弱,图文混排功能简单,不能表示多种媒体的同步关系等缺点也影响HTML的大规模应用以及用于复杂的多媒体数据处理 ;

三,XML

可扩展标记语言XML(eXtensible Markup Language)

综上SGML和HTML的局限性,为解决此问题,1998年2月W3C组织以一种开放的自我描述方式定义的数据结构,XML(eXtensible Markup Language)。它是SGML的一个简化版本,严格来讲,它和SGML一样都拥有文件类型DTD,文件实例XHTML。

特点:描述数据的同时对结构的描述从而体现数据之间的关系。

以上是XML诞生的原因及特点,但是现在又有了另一种数据格式来替代XML的功能,它就是“JSON”

四,JSON

JS对象表示法(JavaScript Object Notation)

也是因为xml繁琐,而且每次传输数据的时候需要将xml形式的数据解析成DOM对象再提取数据,所以就出现了利用Javascript中一些模式来表示结构化数据的JSON,它可以解析成JavaScript对象的数据格式,再之后ECMAScript5对解析json的行为进行了规范,定义了全局对象JSON。下面来重点介绍一下json。

(1)数据类型:简单值,数组和对象

  • 描述对象的方式:
//属性名也要加上引号
        {
            "name":"jack",
            "age":21,
            "sex":"meal"
        }

可能你会觉得这和JavaScript中定义对象字面量的方式有点相似,是的确实有点相似,但是也有不同之处。一:在JSON中没有变量的概念;二:末尾没有分号;

  • 数组
        [{
            "name": "jack",
            "age": 21,
            "sex": "meal"
        }, {
            "name": "rouse",
            "age": 18,
            "sex": "femeal"
        }, {
            "name": "bob",
            "age": 20,
            "sex": "meal"
        }]

数组和对象可以相互嵌套,这样就可以构成更复杂的数据集合。

(2)解析
前面提到json可以解析成JavaScript对象,在将json解析之后可以用很简单的一行代码取得数据:students[2].name,当然是先将解析之后得到的对象保存在变量students中。下面再看看在dom中获取数据的代码:

        document.getElementsByTagName("students")[2].getAttribute("name");

现在你可以理解json为什么受大家欢迎的原因了吧。
(3)JSON对象
ES5对json行为进行了规范,定义了全局对象JSON。它有两个方法:stringify()和parse();这两个方法分别用于将javascript对象序列化为json字符串和将json字符串解析成原生javascript值。
stringify()的用法:

        var book = {
            title:"javaScript高级语言程序设计",
            authors:[
                "Nicholas C.Zakas"
            ],
            edition:3
        };
        var textJson = JSON.stringify(book);
        console.log(textJson);

控制台会打印出:{"title":"javaScript高级语言程序设计","authors":["Nicholas C.Zakas"],"edition":3} 可以发现控制台打印的不包含空格和缩进
parse()的用法:

        var bookCopy =  JSON.parse(textJson);
        console.log(bookCopy);

控制台打印出:


image.png

(4)序列化
JSON.stringify()除了要序列化除了要序列化js对象之外,还要接收两个参数,这两个参数指定用于指定方式序列化js对象。第一个参数是过滤器,可以是一个数组也可以是一个函数;第二个是一个选项,表示是否在JSON字符串中保留缩进。这两个参数单独或综合起来使用可以更深入全面的控制JSON的序列化。

你可能感兴趣的:(xml和json的区别)