JSON与JS的区别以及转换
JSON是什么?(JSON和JavaScript对象有什么区别?)如何把JS对象转化为JSON字符串,又如何把JSON字符串转化为JavaScript对象?
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式, 这意味着在JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。JSON的规则很简单: 对象是一个无序的“名称/值”对集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“名称/值”对之间 使用“,”(逗号)分隔。
它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号;
可以这么说:JSON对象就是一种严格的JS对象,但是JS对象不一定是JSON对象。(JS对象的键可以带单引号,双引号或者不带引号,JSON键也必须带双引号)。
JSON与JS转换说的是JSON字符串与JSON对象(也就是JS对象)的转换。
JSON字符串通过eval可以转换为JSON对象(也就是一种JS对象)。
JSON字符串将JSON对象装成字符串: '{"width":100,"height":200,"name":"rose"}'
JSON只是一种数据格式(或者叫数据形式);
<script> var obj2={};//这只是JS对象 var obj3={width:100,height:200};/*这跟JSON就更不沾边了,只是JS的 对象 */ var obj4={'width':100,'height':200};/*这跟JSON就更不沾边了,只是JS的对象 */ var obj5={"width":100,"height":200,"name":"rose"}; /*我们可以把这个称做:JSON格式的JavaScript对象 */ var str1='{"width":100,"height":200,"name":"rose"}';/*我们可以把这个称做:JSON格式的字符串 */ var a=[ {"width":100,"height":200,"name":"rose"}, {"width":100,"height":200,"name":"rose"}, {"width":100,"height":200,"name":"rose"}, ]; /*这个叫JSON格式的数组,是JSON的稍复杂一点的形式 */ var str2='['+ '{"width":100,"height":200,"name":"rose"},'+ '{"width":100,"height":200,"name":"rose"},'+ '{"width":100,"height":200,"name":"rose"},'+ ']' ; /* 这个叫稍复杂一点的JSON格式的字符串 */ </script>
JSON和JS对象区别对比表
总而言之你可以理解为JSON是JS下的一种数据格式,他从属于JS,并且在处理JSON数据时可直接使用JS内置API
JSON实例
{
"sites": [
{ "name":"菜鸟教程" , "url":"www.runoob.com" },
{ "name":"google" , "url":"www.google.com" },
{ "name":"微博" , "url":"www.weibo.com" }
]
}
JSON - 转换为 JavaScript 对象
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。
由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象
---------------------------------JSON对象(也是一种JS对象)-----------------------------------
下面这个是JSON对象:
键必须为双引号
var json={
"key1":"value1",
"address":{"name":"北京","code":205},
"chengji":[{"name":"物理","chengji":90},{"name":"数学","chengji":100}]
};
alert(json.key1);//value1
alert(json.address.code);//205
alert(json.chengji[0].name+json.chengji[0].chengji);//物理90
注意:对象格式和数组格式可以互相嵌套
注意:json的key是字符串,且必须是双引号,不能是单引号
json的value是Object
json的解析:
json是js的原生内容,也就意味着js可以直接取出json对象中的数据
----------------------------------------JSON语法格式的JS对象---------------------------------
键可以带单引号、双引号或不带引号
//JSON语法的JS对象
var p = {
'name': '张三',
"sex": '男',
age: 20,
info: function() {
alert("这是函数格式!");
},
son: {
name: '张三儿子'
}
}
alert(p);
p.info();
alert(p.son.name);
例子:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>json01</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul> <li id="bj" name="beijing">北京</li> </ul> </body> <script language="JavaScript"> //JSON格式的JS对象(可以直接取值) var data = { "name": "runoob", "alexa": 10000, "site": "www.runoob.com" }; document.write(data.name + "<br/>"); //将JSON字符串转为JS对象的方法一 var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }'); document.write(obj.name + "<br/>"); //将JSON字符串转为JS对象的方法二 //JSON格式的字符串 var test1 = '{"name":"qlq","age":25}'; var obj2 = eval("(" + test1 + ")"); //必须带圆括号 document.write(obj2.name + "<br/>" + obj2.age); //JS对象转换为JSON字符串 var json1 = JSON.stringify(test1); document.write("<br/>" + json1); </script> </html>