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>

 

posted @ 2017-08-12 22:48  QiaoZhi  阅读(760)  评论(0编辑  收藏  举报