大家好,又见面了,我是你们的朋友全栈君。
JSON(JavaScriptObject Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgramming Language, StandardECMA-262 3rd Edition – December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
“名称/值”对的集合(Acollection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyedlist),或者关联数组 (associativearray)。
值的有序列表(Anordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
空白可以加入到任何符号之间。
一、什么是 JSON ?
· JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
· JSON 是轻量级的文本数据交换格式
· JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
· JSON 具有自我描述性,更易理解
· JSON 是纯文本
· JSON 具有”自我描述性”(人类可读)
· JSON 具有层级结构(值中存在值)
· JSON 可通过 JavaScript 进行解析
· JSON 数据可使用 AJAX 进行传输
· 没有结束标签
· 更短
· 读写的速度更快
· 能够使用内建的 JavaScript eval() 方法进行解析
· 使用数组
· 不使用保留字
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
使用 XML
· 读取 XML 文档
· 使用 XML DOM 来循环遍历文档
· 读取值并存储在变量中
使用 JSON
· 读取 JSON 字符串
· 用 eval() 处理 JSON 字符串
JSON 语法是 JavaScript 对象表示语法的子集。
· 数据在名称/值对中
· 数据由逗号分隔
· 大括号保存对象
· 中括号保存数组
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
“firstName”: “John”
这很容易理解,等价于这条 JavaScript 语句:
firstName =”John”
JSON 值可以是:
· 数字(整数或浮点数)
· 字符串(在双引号中)
· 逻辑值(true 或 false)
· 数组(在中括号中)
· 对象(在大括号中)
· null
JSON 数字可以是整型或者浮点型:
{ “age“:30}
JSON 对象在大括号({})中书写:
对象可以包含多个名称/值对:
{ “firstName”:“John”,“lastName”:“Doe”}
这一点也容易理解,与这条 JavaScript 语句等价:
firstName =”John”
lastName =”Doe”
对象可以包含多个 key/value(键/值)对。
key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
key 和 value 中使用冒号(:)分割。
每个 key/value 对使用逗号(,)分割。
你可以使用点号(.)来访问对象的值:
实例
varmyObj, x;
myObj = {
“name“:“google“,
“alexa“:10000,
“site“:null};
x = myObj.name;
你也可以使用中括号([])来访问对象的值:
实例
varmyObj, x;
myObj = {
“name“:“google“,
“alexa“:10000,
“site“:null};
x = myObj[“name“];
你可以使用 for-in 来循环对象的属性:
实例
varmyObj = {
“name“:“google“,
“alexa“:10000,
“site“:null
};
for(xinmyObj){
document.getElementById(“demo“).innerHTML += x + “<br>“;
}
在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:
实例
varmyObj = {
“name“:“google“,
“alexa“:10000,
“site“:null
};
for(xinmyObj){
document.getElementById(“demo“).innerHTML += myObj[x] + “<br>“;
}
JSON 对象中可以包含另外一个 JSON 对象:
实例
myObj = {
“name“:“google“,
“alexa“:10000,
“sites“: {
“site1“:“www.google.com“,
“site2“:“m.google.com“,
“site3“:“c.google.com“
}
}
你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。
实例
x = myObj.sites.site1; // 或者x = myObj.sites[“site1“];
你可以使用点号(.)来修改 JSON 对象的值:
实例
myObj.sites.site1 = “www.google.com“;
你可以使用中括号([])来修改 JSON 对象的值:
实例
myObj.sites[“site1“] = “www.google.com“;
我们可以使用 delete 关键字来删除 JSON 对象的属性:
实例
deletemyObj.sites.site1;
你可以使用中括号([])来删除 JSON 对象的属性:
实例
deletemyObj.sites[“site1“]
JSON 数组在中括号中书写:
数组可包含多个对象:
{
“employees”:[
{ “firstName”:”John”,“lastName”:“Doe”},
{ “firstName”:“Anna”,“lastName”:“Smith”},
{ “firstName”:“Peter”,“lastName”:“Jones”}
]
}
在上面的例子中,对象“employees” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。 JSON 数组在中括号中书写。
JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
JavaScript 中,数组值可以是以上的 JSON数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。
对象属性的值可以是一个数组:
实例
{
“name“:“网站“,
“num“:3,
“sites“:[“Google“, “Runoob“, “Taobao“]
}
我们可以使用索引值来访问数组:
实例
x = myObj.sites[0];
你可以使用 for-in 来访问数组:
实例
for(iinmyObj.sites){
x += myObj.sites[i] + “<br>“;
}
你也可以使用 for 循环:
实例
for(i = 0; i < myObj.sites.length; i++){
x += myObj.sites[i] + “<br>“;
}
JSON 对象中数组可以包含另外一个数组,或者另外一个 JSON 对象:
实例
myObj = {
“name“:“网站“,
“num“:3,
“sites“: [
{
“name“:“Google“,
“info“:[“Android“, “Google 搜索“, “Google 翻译“]
},
{
“name“:“Taobao“,
“info“:[“淘宝“, “网购“]
}]
}
我们可以使用for-in 来循环访问每个数组:
实例
for(iinmyObj.sites){
x += “<h1>“ + myObj.sites[i].name + “</h1>“;
for(jinmyObj.sites[i].info){
x += myObj.sites[i].info[j] + “<br>“;
}
}
你可以使用索引值来修改数组值:
实例
myObj.sites[1] = “Github“;
我们可以使用 delete 关键字来删除数组元素:
实例
deletemyObj.sites[1];
JSON 布尔值可以是 true 或者 false:
{ “flag“:true}
JSON 可以设置 null 值:
{ “name“:null}
因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:
实例
varsites = [
{ “name“:“google“ , “url“:“www.google.com“},
{ “name“:“微博“ , “url“:“www.weibo.com“}
];
可以像这样访问JavaScript 对象数组中的第一项(索引从 0 开始):
sites[0].name;
返回的内容是:
runoob
可以像这样修改数据:
sites[0].name=“菜鸟教程“;
· JSON 文件的文件类型是 “.json”
· JSON 文本的 MIME 类型是 “application/json”
http://www.runoob.com/json/json-parse.html
http://www.runoob.com/json/json-stringify.html
http://www.runoob.com/json/json-eval.html
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125696.html原文链接:https://javaforall.cn