JSON教程
一、什么是JSON
1、JSON指的是JavaScript对象表示法(JavaScript Object Notation)。
2、JSON是轻量级的文本数据交换格式,比XML更小、更快、更易解析。
3、JSON独立于语言。
4、JSON具有自我描述性、更易理解。
注意:JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言。目前非常多的动态编程语言(PHP、.NET)都支持JSON。
二、JSON和XML比较
1、与XML相同之处
1)JSON是纯文本。
2)JSON具有“自我描述性”(人类可读)。
3)JSON具有层级结构(值中存在值)。
4)JSON可通过JavaScript进行解析。
5)JSON数据可使用AJAX进行传输。
2、与XML不同之处
1)没有结束标签。
2)比XML更短。
3)比XML读写的速度更快。
4)能够使用内建的JavaScript eval()方法进行解析。
5)可以使用数组。
6)不使用保留字。
3、为什么使用JSON
对于AJAX应用程序来说,JSON比XML更快更易使用:
使用XML:
读取XML文档。
使用XML DOM来循环遍历文档。
读取值并存储在变量中。
使用JSON
读取JSON字符串。
用eval()处理JSON字符串。
三、JSON语法
JSON语法是JavaScript语法的子集。
1、语法规则
JSON语法是JavaScript对象表示语法的子集。
1)数据在名称/值对中。
2)数据由逗号分隔。
3)大括号保存对象。
4)中括号保存数组。
2、JSON名称/值对
JSON数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
1 | "name" : "Tom" |
3、JSON值
JSON值可以是:
1)数字(整数或浮点数)。
2)字符串(在双引号中)。
3)逻辑值(true或false)。
4)数组(在中括号中)。
5)对象(在大括号中)。
6)null。
4、JSON数字
JSON数字可以是整型或者浮点型:
1 | { "age" :30} |
5、JSON对象
JSON对象在大括号({})中书写:
对象可以包含多个名称/值对:
1 | { "name" : "张三" , "age" :24} |
6、JSON数组
JSON数组在中括号中书写:
数组可以包含多个对象:
1 2 3 4 5 6 | { "student" :[ { "name" : "张三" , "age" :24}, { "name" : "李四" , "age" :25} ] } |
在上面的例子中,对象"student"是包含三个对象的数组。每个对象代表一条关于某个学生(name,age)的记录。
7、JSON布尔值
JSON布尔值可以是true或者false:
1 | { "flag" : true } |
8、JSON null值
JSON可以设置null值:
1 | { "student" : null } |
9、JSON使用JavaScript语法
因为JSON使用JavaScript语法,所以无需额外的软件就能处理JavaScript中的JSON。
通过JavaScript,你可以创建一个对象数组,并像这样进行赋值:
1 2 3 4 | var student=[ { "name" : "张三" , "age" :24}, { "name" : "李四" , "age" :25} ]; |
可以像这样访问JavaScript对象数组中的第一项(索引从0开始)
1 | student[0].name; |
返回的内容是:
1 |
可以像这样修改数据:
1 | student[0].name= "tom" ; |
10、JSON文件
1)JSON文件的文件类型是".json"。
2)JSON文本的MIME类型是"application/json"。
四、JSON对象
1、对象语法
1 | { "name" : "张三" , "age" :25} |
JSON对象使用在大括号({})中书写。
对象可以包含多个key/value(键/值)对。
key必须是字符串,value可以是合法的JSON数据类型(字符串、数字、对象、数组、布尔值或null)。
key和value中使用冒号(:)分割。
每个key/value对使用逗号(,)分割。
2、访问对象
你可以使用点(.)来访问对象的值。
1 2 3 | var myObj,x; myObj={ "name" : "张三" , "age" :24}; x=myObj.name; |
上面的例子输出值:张三。
你也可以使用中括号([])来访问对象的值。
1 2 3 | var myObj,x; myObj={ "name" : "张三" , "age" :24}; x=myObj[ "name" ]; |
上面的例子同样输出值:张三。
3、循环对象
你可以使用for-in来循环对象的属性,使用中括号([])来访问属性的值:
1 2 3 4 | var myObj={ "name" : "张三" , "age" :24}; for (x in myObj){ document.getElementById( "demo" ).innerHTML += myObj[x]+ "<br>" ; } |
4、嵌套JSON对象
JSON对象中可以包含另外一个JSON对象:
1 2 3 4 5 6 7 8 9 | student={ "name" : "张三" , "age" :24, "score" :{ "C#高级编程" :94, "SQL Server" :83, "Python" :75 } } |
你可以使用点号(.)或者中括号([])来访问嵌套的JSON对象。
例如:
1 2 3 | var x=student.score.C#高级编程; // 或者 var x=student.score[ "C#高级编程" ]; |
5、修改JSON对象的值
你可以使用点号(.)来修改JSON对象的值:
1 | student.score.C#高级编程=90; |
你也可以使用中括号([])来修改JSON对象的值:
1 | student.score[ "C#高级编程" ]=90; |
6、删除JSON对象的属性
我们可以使用delete关键字来删除JSON对象的属性:
1 | delete student.score.C#高级编程; |
也可以使用中括号([])来删除JSON对象的属性:
1 | delete student.score[ "C#高级编程" ]; |
五、JSON数组
1、数组作为JSON对象
1 | [ "C#" , "Java" , "Python" ] |
JSON数组在中括号中书写。
JSON中数组值必须是合法的JSON数据类型(数字、字符串、对象、数组、布尔值或null)。
JavaScript中,数组值可以是以上的JSON数据类型,也可以是JavaScript的表达式,包括函数、日期、及undefined。
2、JSON对象中的数组
对象属性的值可以是一个数组:
1 2 3 4 5 | var student={ "name" : "张三" , "age" :24, "subject" :[ ".NET" , "java" , "python" ] } |
可以使用索引值来访问数组:
1 | var x=student.subject[0]; |
3、循环数组
可以使用for-in来访问数组:
1 2 3 | for (i in student.subject) { x += student.subject[i]+ "<br>" ; } |
也可以使用for循环
1 2 3 | for ( int i=0;i<student.subject.length;i++) { x+=student.subject[i]+ "<br>" ; } |
4、嵌套JSON对象中的数组
JSON对象中数组可以包含另外一个数组,或者另外一个JSON对象:
1 2 3 4 5 6 7 8 9 | student={ "name" : "张三" , "age" :24, "score" :[ { ".NET" :91}, { "java" :85}, { "python" :79} ] } |
可以使用for-in来循环访问数组
1 2 3 | for (i in student.score) { x += "<h1>" +student.score[i]+ "</h1>" ; } |
5、修改数组值
可以使用索引值来修改数组值:
1 | student.score[1]=93; |
6、删除数组元素
可以使用delete关键字来删除数组元素:
1 | delete student.score[0]; |
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决