欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Json入门基础、Json常用数据类型、Json语法

程序员文章站 2024-01-30 16:39:58
...

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”]

 

3json数组

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入门基础、Json常用数据类型、Json语法

可以使用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对象更安全。