Home  >  Q&A  >  body text

javascript - 构造json参数时key需要加引号吗

例如下面这两段代码:
A:

{name:"dd",age:"16"}

B:

{"name":"dd","age":"16"}

如题,必须要还是最好要写成B的形式,平时没注意,两种都写过,也没报错,JS中不加也行,其他语言环境呢?哪种规范呢、?好像看过是:和关键字冲突的时候必须加,其他时候可以不加;如果json字符串的key缺少双引括起来,则json_decode会失败。还有其他理由吗?

PHP中文网PHP中文网2749 days ago693

reply all(9)I'll reply

  • PHPz

    PHPz2017-04-10 14:53:02

    前者是Javascript的对象字面量语法,后者是JSON,后者是前者的一个子集

    如果就是写JS代码,那么只要风格统一,加不加都OK。我个人是倾向于不加的,因为表达数据的场景比较少,构建对象,声明方法的场景比较多,作为方法名来说不加引号比较有sense

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:53:02

    json不是最好加不加,而是必须加,而且加的是双引号。
    题主可以参考下面这个网站:http://www.bejson.com/

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:53:02

    需要加,
    不清楚js是否可以,在Python下是必须加的,否则报错

    >>> import json
    >>> a= '{name:"dd",age:"16"}'
    >>> json.loads(a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
        return _default_decoder.decode(s)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
        obj, end = self.scan_once(s, idx)
    ValueError: Expecting property name: line 1 column 2 (char 1)
    >>> a= '{"name":"dd","age":"16"}'
    >>> json.loads(a)
    {u'age': u'16', u'name': u'dd'}
    

    因为json作为一种使用广泛的数据交换格式,既然是交换必然是多种语言之间,所以必须要加入。

    关于规范

    json规范关于pair的描述

    pair
    string : value

    json中对于string的描述

    A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java string.

    字符串就是多个Unicode字符,使用双引号包裹。

    规范来源http://json.org/

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 14:53:02

    @mcfog 的说法是正确的,JSON是一种数据格式,实际上在JS中也是加上的,只是你容易和Object混淆而已。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:53:02

    写成B最好, 通用,

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:53:02

    加上去准没错!

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:53:02

    json中的key 必须是用双引号包围的,并且要搞清楚JSON是字符串

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 14:53:02

    我的理解是json必须加,
    因为那意味着字符串对其他的映射。。

    js的话是一个类的成员变量。。(雾)

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 14:53:02

    JSON规范规定是必须要加上双引号的,而且作为不同系统之间的数据交换,大家最好都遵循标准,否则可能会出问题。

    reply
    0
  • Cancelreply