JSON(JavaScript Object Notation) 是一种轻量级的数据交换格局。它基于ECMAScript的一个子集。 JSON选用完全独立于言语的文本格局,但是也使用了类似于C言语宗族的习气(包含C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使json调试成为抱负的数据交换言语。 易于人阅览和编写,同时也易于机器解析和生成(一般用于提高网络传输速率)。
二: 在学习JavaScript的过程中,我们接触了一种新的数据格式——JSON数据格式。JSON的全称是”JavaScript Object Notation”,意思是javascript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
JSON的格式
JSON 数据的书写格式是键(名称)/值对。
JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对包括字段名称(在双引号中),后面写一个冒号,然后是值。
JSON 值可以是:字符串(在双引号中)、数组(在中括号中)、数字(整数或浮点数)、逻辑值(true 或 false)、对象(在大括号中)、 null。
JSON结构
JSON结构有两种结构,就是对象和数组。通过这两种结构可以表示各种复杂的结构。 {"province": "Shanxi"}
可以理解为是一个包含province为Shanxi的对象, ["Shanxi","Shandong"]
这是一个包含两个元素的数组
而 [{"province": "Shanxi"},{"province": "Shandong"}]
就表示包含两个对象的数组。
当然了,你也可以使用 {"province":["Shanxi","Shandong"]}
来简化上面的JSON,这是一个拥有一个name数组的对象。
下面是一小段JSON代码:
{“skillz”: {“web”:[ {“name”: “html”, “years”: “5” }, {“name”: “css”, “years”: “3” }],”database”:[ {“name”: “sql”, “years”: “7” }]}}
花括弧,方括弧,冒号和逗号
花括弧表示一个“容器”
方括号装载数组
名称和值用冒号隔开
数组元素通过逗号隔开
三: Json 和 xml的区
1. 在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
2. 在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
3. 在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
4. 在解码难度方面,XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
5. 在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
6 JSON相对于XML来讲,数据的体积小,Json与JavaScript的交互愈加方便,Json对数据的描述性比XML较差,Json的速度要远远快于XML
7 从内存方面,json去掉了标签,节省了大量的内存空间
例如 xml
<Book>
<name>name</name>
<author>
<name>authorname</name>
<age>23</age>
</author>
<year>2010</year>
</Book>
json
{"name":"name","author":{"name":"authorname","age":23},"year":2010}
四 json 和js对象的转换关系
很多人搞不清楚 JSON 和 JS 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。平时说的JSON对象,是JSON格式的JS对象或是符合JSON数据结构要求的JS对象。
JSON和JS对象互转
要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
结果:
要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
结果:
五 :json中带有转义字符
比如从后台返回这样一段json串,中间有个字段 reminderContent 这个String类型后面其实也是一个json串,后台封装数据之后就自动转义了其中的双引号,这个时候用Gson转换的时候会报错的,因为你的实体类中 reminderContent 这个字段是String类型,但是后台的这个数据中却包含有转义符号,因此无法解析成功。可以在代码中存在,入数据库中必须解析
{
"userInfo": {
"headPicUrl": "585658179_temphead.jpg",
"nickName": "Mia",
"userId": 15678355887
},
"reminderContent": "{\"contentText\":\"我就说一句话\",\"contentTitle\":\"提醒\",\"settingTime\":1523254256000,\"or\":\"1\"}",
"reminderId": 152352210043891,
"reminderTime": 1523522100447,
"reminderType": 6
}
目前本人的方法是,先把从后台获取的整个字符串过滤一把,把其中的转义符号替换一下,比如:
String jsonStr = "后台获取的数据" jsonStr = jsonStr.replace("\\\"", "'");
然后再解析整个Json串;
ReminderEntity reminderEntity = gson.fromJson(jsonStr, ReminderEntity.class);