JSON入门详解(二)

JSON基础文章荐读

这些都是我写过的文章,特别是第一篇文章,荐读。

JavaScript创建JSON对象

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JSON</title>
  </head>
  <body>
    <h1>员工信息</h1>
    <p>
      ID: <span id="js_id"></span><br/> 
      Name: <span id="js_name"></span><br/> 
      Age: <span id="js_age"></span><br/> 
	  Email: <span id="js_email"></span><br/> 
    </p>
    <script>
      var jsonObj= {
	    "id":"1111",
	    "name":"王富贵", 
	    "age":"30",
		"email":"[email protected]"
      };
      document.getElementById("js_id").innerHTML=jsonObj.id 
      document.getElementById("js_name").innerHTML=jsonObj.name
      document.getElementById("js_age").innerHTML=jsonObj.age
	  document.getElementById("js_email").innerHTML=jsonObj.email
    </script>
  </body>
</html>

在这里插入图片描述

JSON与XML的那些事

有关于第三篇文章——《Java对象数据的XML和JSON表示》,这篇文章主要是实例的演示,下面讲讲JSON与XML的异同,以及为什么选择JSON更好。

JSON与XML的相同之处

  • 都是纯文本
  • 都具有自我描述性,我们能够理解其含义
  • 都具有嵌套的层次结构
  • 都可通过JavaScript进行解析,Java等语言也支持解析二者
  • 包含的数据都可使用AJAX(Asynchronous Javascript And XML)进行传输

JSON与XML的不同之处

  • JSON没有结束标签,XML严格遵循格式化
  • JSON更简洁
  • JSON读写速度更快
  • JSON能够使用JavaScript内置的eval()函数进行解析
  • JSON能使用数组
  • JSON不使用保留字

AJAX相关JSON与XML

  • AJAX应用程序解析XML的流程:
    1.读取XML文档
    2.使用XML DOM来循环遍历文档
    3.读取值并存储在变量中
  • AJAX应用程序解析JSON的流程:
    1.读取JSON字符串
    2.使用eval()处理JSON字符串

=> 对于AJAX应用程序来说,JSON比XML可以更便捷。

JSON与XML的解析

XML需要使用XML解析器来解析,JSON可以使用标准的JavaScript函数来解析,这也是二者最大不同之一了。

  • JSON.parse():将一个 JSON 字符串转换为 JavaScript 对象。
  • JSON.stringify():于将 JavaScript 值转换为 JSON 字符串。

JSON核心知识

JSON语法规则概述

  • 大括号({})保存对象的K-V对
  • 中括号([])保存数组,同类多种元素
  • 在K-V对中存储数据
  • K-V对中的数据用逗号(,)分隔,K与V之间用冒号(:)分隔
  • 六种类型:
    • 数字(integer or float)
    • 字符串("")
    • 逻辑值(true or false)
    • 数组([])
    • 对象({})
    • null

JSON对象相关

JSON访问K-V对的对象值

上面的代码可以按照名称访问JSON对象值。

<p>
  ID: <span id="js_id"></span><br/> 
  Name: <span id="js_name"></span><br/> 
  Age: <span id="js_age"></span><br/> 
  Email: <span id="js_email"></span><br/> 
</p>

读取id属性为例,还有如下两种写法:

  • 使用点号(.)访问:
    var a = jsonObj.id;
    
  • 使用数组式方括号([])访问:
    var a = jsonObj["id"];
    

JSON循环读取对象

我们可以使用 for-in 来循环对象读取对象属性和值(参考Java的 for-each 循环):

for (a in jsonObj) {
    document.getElementById("attribute").innerHTML += a + ":" + jsonObj[a]+ "<br>";
}

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JSON</title>
  </head>
  <body>
    <h1>员工信息</h1>
      <p id="attribute"></p>
    <script>
      var jsonObj= {
	    "id":"1111",
	    "name":"王富贵", 
	    "age":"30",
		"email":"[email protected]"
      };
	  for (a in jsonObj) {
        document.getElementById("attribute").innerHTML += a + ":" + jsonObj[a]+ "<br>";
      }
    </script>
  </body>
</html>

运行示例:
在这里插入图片描述

JSON修改对象的值

可以直接用点(.)运算符或者方括号([])来访问并修改对象的值。

下面的代码,把“王富贵”的名字,改成了“陈二狗”:

jsonObj.name="陈二狗";

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JSON</title>
  </head>
  <body>
    <h1>员工信息</h1>
      <p id="attribute"></p>
    <script>
      var jsonObj= {
	    "id":"1111",
	    "name":"王富贵", 
	    "age":"30",
		"email":"[email protected]"
      };
	  jsonObj.name="陈二狗";
	  for (a in jsonObj) {
        document.getElementById("attribute").innerHTML += a + ":" + jsonObj[a]+ "<br>";
      }
    </script>
  </body>
</html>

运行示例:

在这里插入图片描述

JSON删除对象的值

可以使用delete关键词+点(.)运算符或者方括号([])来访问并删除对象的值。

下面的代码,删除了王富贵的年龄和Email:

delete jsonObj.age;
delete jsonObj["email"];

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JSON</title>
  </head>
  <body>
    <h1>员工信息</h1>
      <p id="attribute"></p>
    <script>
      var jsonObj= {
	    "id":"1111",
	    "name":"王富贵", 
	    "age":"30",
		"email":"[email protected]"
      };
	  delete jsonObj.age;
	  delete jsonObj["email"];
	  for (a in jsonObj) {
        document.getElementById("attribute").innerHTML += a + ":" + jsonObj[a]+ "<br>";
      }
    </script>
  </body>
</html>

运行示例:
在这里插入图片描述

JSON数组相关

数组和对象相似,包括访问、修改、删除的点号(.)和删除的delete关键词。
不过,使用属性名+方括号的访问方式被换成了使用索引数字+方括号的访问方式(参考其他编程语言)

JSON嵌套问题

之前也说了,可以大括号小括号随便嵌套。

读or改的话,只需要符合上面说的访问语法,逐层使用点号即可。

谈谈怎么去理解这个嵌套关系☆☆☆

我想用Java面向对象的知识来说明一下。

  • 先说为什么是大括号,为什么是中括号?
    系统中可能存在同一类型的很多对象,他们实际上是“平级”的,这时,相当于是数组中存储的多个元素,所以要使用方括号([])。
    而每个类规定了其对象应该具有的属性,属性有类型,也有其取值,所以K-V对儿表达的正是这种属性名:属性值的关系,它是一个对象内部的。

  • 接下来谈谈为什么会嵌套呢?
    四种情况吧:

    • 元素的类型可能是引用类型的,引用类型的对象可能含有某种属性,该属性还是引用类型,这时就出现了层次的嵌套,这是字典套字典,即大括号套大括号。
    • 数组可能不是一维的,二维数组是一维的一维数组,所以存在数组套数组,即中括号套中括号。
    • 数组的元素可能是引用类型的,该类型可能有很多属性,这就是数组套字典,即中括号套大括号。
    • 字典元素的属性中可能有数组,这就是字典套数组,即大括号套中括号。

    如此,我们不难理解嵌套的实际意义了。

JSON与String的转换

JSON 通常用于与服务端交换数据。通过网络接收服务器端发来的JSON是String,而通过网络发往服务器的JSON也是String,但我们处理的是JSON,所以设计JSON与String的转换。

转换函数是这样的:

  • JSON.parse():String => JSON
  • JSON.stringify():JSON => String

JSON.parse()

语法格式:

JSON.parse(text[, reviver])

参数说明:

参数名称 参数意义 是否必选
text 有效的JSON字符串
reviver 每个成员都会调用的、用于转换结果的函数 ×

实例:
接收到数据:

var str = '{"id":"1111", "name":"王富贵", "age":"30", "email":"[email protected]"}';

JSON.parse():

var jsonObj = JSON.parse(str);

JSON.stringify()

语法格式:

JSON.stringify(value[, replacer[, space]])

参数说明:

参数名称 参数意义 是否必选
value 要转换的JavaScript值(通常为对象或数组)
replacer 用于转换结果的函数或数组 ×
space 文本添加缩进、空格和换行符 ×

space参数:

  • 值为10以下整数表示这么多空格
  • 值为10以上整数表示10个空格
  • 可以用其他分隔符表示比如"\t"

实例:
接收到数据:

var jsonObj = {"id":"1111", "name":"王富贵", "age":"30", "email":"[email protected]"};

JSON.parse():

var str = JSON.stringify(jsonObj);

注意事项:
JSON不允许包含函数,JSON.stringify()会删除JavaScript对象的函数,包括key和value。
真的不建议使用函数,如果非要用,也要先将函数转换为字符串再用。

JSON与Date对象的处理

JSON不能存储Date对象!

如果我们想要存储Date对象,需要将其转换为字符串,再将字符串转换为Date对象。

JSON文件后缀

  • JSON文件的文件类型:".json"
  • JSON文本的MIME类型:“application/json”

在这里插入图片描述

JSON学习工具

JSON语法验证器

JSLint
在这里插入图片描述

JSON在线解析器

推荐菜鸟教程的JSON在线解析器,支持如下功能:

  • 格式化
  • 压缩
  • 验证
  • JSON→XML
  • JSON→CSV
  • JSON→YAML

在这里插入图片描述

发布了726 篇原创文章 · 获赞 1552 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104947854