深入理解XML和JSON(初学者必看)

目录

1.对于XML的理解

1.1XML的用途

1.2XML的书写格式

2.对于JSON的理解

2.1JSON的用途

2.2JSON的书写格式

2.3JSON对象的相关方法

2.4JSON对像的序列化选项

2.5JSON相对于XML的优点

1.对于XML的理解

XML是一种存储数据的格式

1.1XML的用途

XML是早期用来存储和传输结构化数据的标准(一种存储数据的格式)。说白了,早前前端利用XML来实现跟后端的数据交互。

1.2XML的书写格式

例如,我想把“我有一群朋友,分别是TanZe、KongWen,我最好的朋友是TanZe“这句话,利用XML格式,从服务器端传递到前端,我应该按照以下书写规则来进行书写
<friendList> // friendList标签表示,我有一群朋友
    <friend>
 // friend标签表示,这是我的朋友
        <name>TanZe</name> // name标签表示,这是我朋友的名字
    </friend>
    <friend> // friend标签表示,这是我的朋友
        <name>KongWen</name> // name标签表示,这是我朋友的名字
    </friend>
    <bestfriend>// bestfriend标签表示,这是我最好的朋友
        <name>TanZe</name> // name标签表示,这是我朋友的名字
    </bestfriend>
</friendList>

在上面我们可以看到上面的写法很像HTML的DOM节点,但是这些节点都是自定义的,这是为了能更清楚的理解我们在这里存储的是什么内容,其次还能看到就是重复代码(节点)特别多,这就是XML最麻烦的一个地方,所以后面出现了JSON

总结:
1.在XML数据格式中,我们用< > 或者其它标志来表示我们存储的内容
2.可以使用自定义标签来表示存储内容,即标签没有被限制并且没有被预定义

2.对于JSON的理解

因为XML冗余和啰嗦,所以出现了JSON,理解JSON最关键的一点是别把它当成一个编程语言,而是要把它当成一种数据格式。

2.1JSON的用途

用来存储数据,是人和机器都能看得懂的格式,统一的格式

2.2JSON的书写格式

{
    "users" : 
        [
            {
                "name" : "TanZe",
                "age" : 22,
                "hobbies" : ["basketball","read"],
                "friends" : 
                    [
                        {
                            "name" : "JiangX",
                            "age" : 22,
                            "hobby" : "badminton",
                            "another" : null,
                            "running" : true                                                                  
                        }
                    ]
            },
            {
                "name" : "KongWen",
                "age" : 22,
                "hobbies" : ["basketball","read"],
                "friends" : 
                    [
                        {
                            "name" : "Amao",
                            "age" : 23,
                            "hobby" : "rugby",
                            "another" : null,
                            "running" : true 
                        }
                    ]
            }
        ],
    "subject" : 
        [
            {
                "firstName" : "English",
                "score" : 98,
                "ranking" : "first"
            },
            {
                "secondName" : "Math",
                "score" : 100,
                "ranking" : "first"
            },
            {
                "thirdName" : "Physics",
                "score" : 80,
                "ranking" : "first",
                "active" : null
            }
        ]
}

在上面我们可以看到,JSON数据格式包含了字符串、数值、布尔值和null,以及对象和数组,这里继续提醒下,JSON不是编程语言,而是一种存储数据的格式,则我们要将它和JavaScript语言却分开来。其次上面没有出现分号、变量。最后就是对象里的属性名必须用双引号括起来。

总结:
1.区别JavaScript编程语言,JSON只是一个存储数据的格式
2.JSON数据格式只能包含字符串、数值、布尔值和null,以及对象和数组,其余数据类型会报错
3.JSON中的对象必须使用使用双引号把属性名括起来,不然会报错
4.JSON中的对象不需要变量声明且不需要加分号,不然会报错
5.同一个对象里面不允许出现两个相同的属性,而数组允许

2.3JSON对象的相关方法

首先我们来说说早期的JSON解析器,它基本上相当于是JavaScript的eval()函数(直接执行字符串)。因为JSON是JavaScript语法的子集,所以eval()函数可以解析、解释(这种直接解析的方法很不安全),并将其作为JavaScript对象和数组返回。而ES5增加了JSON全局对象,正式引入解析JSON的能力,所以就不在用不安全的eval函数来解析JSON数据。

1.JSON.stringify()方法,将JS对象转换为JSON对象,输出不包含空格或缩进的JSON字符串
let book = {
  title : "水浒传",
  author : "施耐庵",
  age : 23
}
let JsonBook = JSON.stringify(book);
console.log(JsonBook); // {"title":"水浒传","author":"施耐庵","age":23}
2.JSON.parse()方法,将JSON对象转换为JS对象,通过JSON.stringify()方法转将 对象1换成JSON对象,之后使用JSON.parse()方法将得到的JSON对象转换为 对象2,转换后是两个完全不同的对象,没有任何关系,因为对象转换之后会忽略值为undefiened、函数和原型成员。
let book = {
  title : "水浒传",
  author : "施耐庵",
  age : 23
}

let JsonBook = JSON.stringify(book);
let newBook = JSON.parse(JsonBook);
console.log(JsonBook);
console.log(newBook);
console.log(newBook === book); // false,两个对象没有任何关系
注意:
1.在序列化JavaScript对象时,所有的函数和原型成员都会有意地在结果中省略。此外,值为undefined的任何属性也会被跳过,最终的到的就是所有实例属性均为有效JSON数据类型的表示
2.如果给JSON.parse()传入的JSON字符串无效,则会导致抛出错误
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
  sex: undefined, // 属性值为 undefined,被忽略
  sing:function(){ // 函数,被忽略
    console.log('我是施耐庵,我会唱歌')
  },
  [[Array.prototype.push]]:function(){ // 原型成员,被忽略
    console.log('把数据放进来')
  }
}

let JsonBook = JSON.stringify(book);
let newBook = JSON.parse(JsonBook);
console.log(JsonBook); // {"title":"水浒传","author":"施耐庵","age":23}
console.log(newBook); // {title: '水浒传', author: '施耐庵', age: 23}
console.log(newBook === book); // false
console.log(book); // {title: '水浒传', author: '施耐庵', age: 23, sex: undefined, sing: ƒ, …}

2.4JSON对像的序列化选项

1.为了更好的控制JSON序列化,对于JSON.stringify()方法增加到了三个参数,第一个参数是需要序列化的对象,第二个参数是对序列化的对象进行过滤处理,第三个参数则是字符串的缩进,最大缩进值为10,如果缩进参数是一个字符串而非数值,那么JSON字符串中就会使用这个字符串而不是空格来缩进,使用字符串时,也有10个字符的长度限制。如果超出10,则会在第10个字符处截断
// 第二个参数为数组时
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
}
let JsonBook = JSON.stringify(book,['title']); // 数组里面表示选择的键,将对应的键值对进行序列化
console.log(JsonBook); // {"title":"水浒传"}

// 第三个参数表示字符串的缩进(缩进参数为数值)
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
}
let JsonBook = JSON.stringify(book,null,4) // 一般把缩进数值改为4,就会很美观
console.log(JsonBook);
/*
{
    "title": "水浒传",
    "author": "施耐庵",
    "age": 23
}
*/
// 第三第三个参数表示字符串的缩进(缩进参数为非数值,而是字符串)
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
}
let JsonBook = JSON.stringify(book,null,'--') // 缩进参数为非数值,而是字符串
console.log(JsonBook);
/*
{
--"title": "水浒传",
--"author": "施耐庵",
--"age": 23
}
*/
2.有时候,对象需要在JSON.stringify()之上自定义JSON序列化,此时可以在要序列化的对象里添加toJSON()方法,序列化会基于这个方法返回适当的JSON表示,事实上,原始的Date对象就有toJSON()方法,能够自动将JavaScript的Date对象转为ISO 8601 日期字符串(本质上语Date对象上调用toISOSting()方法一样)
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
  toJSON:function(){ // toJSON()方法
    return this.title // 序列化之后返回title属性对应的值
  }
}
let JsonBook = JSON.stringify(book)
console.log(JsonBook); // “水浒传”
// 原始Date对象的toJOSN()方法
let time = new Date();
console.log(time.toJSON());
3.JSON.parse()方法也可以接收一个额外的参数,这个函数会针对每个键值对都调用一次
let book = {
  title: "水浒传",
  author: "施耐庵",
  age: 23,
  releaseDate: new Date(2022,12,21)
}

let JsonBook = JSON.stringify(book)
let ParseBook = JSON.parse(JsonBook,(key,value) => {
  return key === 'releaseDate' ? new Date(value) : value
})
console.log(ParseBook)
console.log(ParseBook.releaseDate.getFullYear());  // 2023

2.5JSON相对于XML的优点

JSON是一种轻量级的数据格式,可以方便地表示复杂的数据结构,相比XML,JSON的兼容性更好,几乎所有浏览器都可以用,并且JSON更加简洁,XML显得更加冗余和啰嗦

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执迷原理

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值