Json入门基础、Json常用数据类型、Json语法
1、Json语法规则
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
(1)、json名称/值对
“name” : “值”
(2)、json值可以是
数据(整数、浮点数)、字符串(双引号中)、逻辑值(true、false)、数组(中括号中)、对象(大括号中)、null
(3)、json数字
{“age” : 20}
(4)、json对象
大括号中、多个名称/值用逗号隔开
{“name” : “值”, “url”, “www”}
(5)、json数组
中括号中,可包含多个对象
{“sites” : [
{“name” : “值”, “url” : “www”},
{“age” : 20}
]
}
(6)、json布尔值
{“flag” : true}
(7)、json unll
{“boot” : null}
另:json使用JavaScript语法
var sites = {
{“name” : “值”, “url” : “www”},
{“age” : 12, “url” : “aaa”}
};
访问:Sites[0].name;
返回:值
修改数据:sites[0].name = “修改值”
2、json对象
(1)大括号;对象包含key/value(键/值)对
Key必须是字符串,value为合法jaon数据类型(字符串、数字,对象,数组,布尔值,null)
Key和value中用冒号(:)分隔
每个key/value对使用逗号(,)分隔
(2)json对象的访问
a、使用点号(.)
var myobj, x;
myobj = {
{“name” : “值”, “url” : “www”},
{“age” : 12, “url” : “aaa”}
}
X = myobj.name;
b、使用中括号([])
var myobj, x;
myobj = {
{“name” : “值”, “url” : “www”},
{“age” : 12, “url” : “aaa”}
}
X = myobj[“name”]
(3)对象的遍历
a、使用for-in来遍历对象的属性
例:
var myobj = {“name” : “值” , “url” : “www” };
for (x in myobj){
document.getElementById(“demo”).innerHTML += x + “<br>”
}
b、使用for-in遍历对象的属性是,使用中括号([])来访问属性的值
例:
var myobj = {“name” : “值” , “url” : “www” };
for (x in myobj){
document.getElementById(“demo”).innerHTML += myobj[x] + “<br>”
}
(4)嵌套json对象
Myobj = {“name” : “weng”,
“sites” : {“site1” : “www”, “site2” : “baidu”}
}
访问:
x = myobj.sites.site1;
或:
x.myobj.sites[“site1”];
(5)修改值
a、使用点号(.)修改值
myobj.sites.site1 = “aaa”;
b、使用中括号修改值
myobj.sites[“site1”]= “aaa”;
(6)删除对象属性
delete myobj.sites.site1;
delete myobj,sites[“site1”]
3、json数组
a、数组作为json对象
中括号;值为合法的json数据类型;
JavaScript中,数组值可以是以上json数据类型,也可是JavaScript的表达式,包括函数,日期,undefined
b、对象属性可以是一个数组
例:
{“name” : “www”,
“sites” : [“baidu”, “taobao”]
}
c、可以使用索引值来访问数组
x = myobj.sites[0];
d、遍历数组
(i)使用for-in访问数组
for(i in myobj.sites){
x += myobj.sites[i] + “<br>”;
}
(ii)使用for访问数组
for(i = 0; I < myobj.sites.length; i++){
x += myobj.sites[i] + “<br>”;
}
e、嵌套json对象中的数组
json对象中数组可以包含另一个数组,或者另一个json对象
例:
myobj = {
“name” : “网站”,
“sites” : [
{“name” : “baidu”, “info” :[“android”, “java”] },
{“name” : “ali”, “info” : [“taobao”, “alipay”]}
}
使用for-in遍历每个数组
for(I in myobj,sites){
for(j in myobj.sites[i].info){
x += myobj.sites[i].info[j] + “<br>”;
}
}
f、修改数值
myobj.sites[1] = “github”;
g、删除数值元素
delete myobj.sites[1];
4、JSON.parse()
(1)json用于与服务器端交换数据,在接收服务器数据时一般是字符串。
使用JSON.parse( text[, reviver])
注:text:必需,一个有效的JSON字符串
reviver:可选,一个转换结果的函数,将为对象的每个成员调用次函数。
例:
(i)从服务器收到
{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }
(ii)使用JSON.parse()处理以上数据,将其转换为JavaScript对象:
var obj = JSON.parse(‘{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }’)
(iii)使用json数据
<p id = “demo”></p>
<script>
var obj = JSON.parse(‘{"name":"runoob", "alexa":10000, "site":"www.runoob.com" }’);
document.getElementById(‘demo’).innerHTML = obj.name + “: ” + obj.site;
</sctopr>
例1:从服务端接收JSON数据
myobj = JSON.parse(this.responseText);
document.getElementById(“demo”).innerHTML = myobj.name;
例2:从服务端接收数组的JSON数据
myArr = JSON.parse(this.resopnseText);
document.getElementById(“demo”).innerHTML = myArr[1];
(2)异常
(a)JSON不能存储Date对象
若要存储Date对象,则要将其转换为字符串,之后再将字符串转换为Date对象。
例1:
<p id="demo"></p>
<script>
var text = ‘{“name” : “aaa”, “initDate” : “2019-03-05”, “site” : “www”}’;
var obj = JSON.parse(text);
obj.initDate = new Date(obj.initDate); //没有则直接系显示字符串
document.getElementById(“demo”).innerHTML = obj.name = “时间:” + obj.initDate;
</script>
输出:
可以使用JSON.parse的第二个参数reviver,一个转换结果函数,对象的每个成员调用此函数。
例2:
var text = ‘{“name” : “aaa”, “initDate” : “2019-03-05”, “site” : “www”}’;
var obj = JSON.parse(text, fun(key, value){
if(key == “initDate”){
return new Date(value);
}else{
return value;
}
});
(b)JSON不允许包含函数,但可将函数作为字符串存储,之后再将字符串转换为函数
var text = ‘{“name” : “aaa”, “fun” : “function(){return 100;}”, “site” : “www”}’;
var obj = JSON.parse(text);
obj.fun = eval(“(” + obj.fun + “)”);
document.getElementById(“demo”).innerHTML = obj.name + “函数:” + obj.fun();
注:不建议在JSON中使用函数
5、JSON.stringify()
(1)、JSON一般用于与服务端交换数据,在向服务器发送数据时一般是字符串,可用JSON.stringyify()方法将JavaScript对象转换为字符串。
(2)、语法
JSON.stringify( value[, replacer[, space]] )
参数:
value:必需,要转换的JavaScript值(通常为对象或数组)
replacer:可选,用于转换结果的函数或数组
如果replace为函数,则JSON.strngify将调用该函数,并传入每个成员的键值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:””。
如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当value也为数组时,将忽略replacer数组。
space:可选,文本添加缩进、空格、换行符,如果space是数字,则返回值文本在每个级别缩进指定数目的空格,如果space大于10,则文本缩进10个空格,splace也可是非数字,如“\t”。
(3)JavaScript对象转换
例:
var obj = {“name” : “aaa”, “site” : “baidu”};
var myJSON = JSON.stringify(obj);
document.getElementById(“demo”).innerHTML = myJSON;
(4)JavaScript数组转换
例:
var arr = [“www”, “baidu”];
var myJSON = JSON.stringify(arr);
(5)异常
(a)JSON不能存储Date对象
JSON.stringify()会将所有日期转换为字符串
var obj = {“name” : “aaa”, “initDate” : new Date(), “site” : “www”};
var myJSON = JSON.stringify(obj);
document.getElementById(“demo”).innerHTML = myJSON;
(b)JSON不允许包含函数
JSON.stringifu()会删除JavaScript对象的函数,包括key和value
例:
var obj = {“name” : “aaa”, “fun” : function(){return 100}, “site” : “www”};
var myJSON = JSON.stringify(obj);
document.getElementById(“demo”).innerHTML = myJSON;
输出:
{“name” : “aaa” , “site” : “www”} //fun将被删除
改善:
var obj = {“name” : “aaa”, “fun” : function(){return 100}, “site” : “www”};
obj.alexa = obj.alexa.toString();
var myJSON = JSON.stringifu(obj);
document.getElementById(“demo”).innerHTML = myJSON;
6、把json文本转换为JavaScript对象
json是JavaScript语法子集,JavaScript函数eval()可用于将JSON文本转换为JavaScript对象。
例:
var txt = ‘{“sites” : [‘ +
‘{“name” : “aaa”, “url” : “baidu”} ,’ +
‘{“name” : “www”} ]}’;
var obj = eval(“(” + txt “)”); //类似JSON.parse()
document.getElementById(“name”).innerHTML.sites[0].name;
注:eval()可编译并执行任何JavaScript代码,但还有潜在安全隐患,使用JSON解析器将JSON转换为JavaScript对象更安全。
上一篇: 说区块链-学习笔记
下一篇: 消息中间件之kafka(一)