《JavaScript高程》关于JSON
迷茫
迷茫 2017-04-11 11:40:46
[JavaScript讨论组]

《JavaScript高程》中说JSON中对象的属性名任何时候都要加双引号,后面却又有:

    {
        "title": "professional javascript",
        "authors": [
            "nicholas c.zakas"
        ],
        edition: 3,
        year: 2011
    }

这里的editionyear为什么没加双引号?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
高洛峰

因为你题目中的代码根本不是JSON,而是“对象字面量”。

JSON是一种独立于具体语言的数据交换格式,它虽然的确是脱胎于JavaScript中的对象字面量表示方法的,但是它的格式要求比对象字面量严格很多,包括属性名必须用双引号括起来。

所以,书中的说法并不矛盾,因为前后说的不是同一种东西。

给你举个例子吧:

var obj = {name: 'foo', age: 12}; // 这是对象字面量
console.log(JSON.stringify(obj)); // 结果是{"name":"foo","age":12},就是JSON

参考这里:http://www.json.org/json-zh.html

PHP中文网

我当时也发现这个问题,做了个测试:

在不给age加双引号时这不是JSON,因此不能使用JSON.parse()方法将其转化成json对象

console.log(JSON.parse('{"name" : "safilo", age : 12}')); //浏览器直接报错

所有key都加上双引号才是严格意义上的JSON,才能使用JSON.parse()将其转化成json对象

console.log(JSON.parse('{"name" : "safilo", "age" : 12}'));

结论:JSON键值都必须有双引号,即使值为number类型也不能省略。

迷茫

规范的json确实是无论是key还是value都加双引号。
一般来说,json中的key可以不加引号,也能正确读取。

伊谢尔伦

不懂装懂的答案,自删

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号