JSON键必须用引号括起来吗?

ct3nt3jp  于 2022-12-20  发布在  其他
关注(0)|答案(7)|浏览(244)

示例:以下代码对JSON Spec有效吗?

{
    precision: "zip"
}

或者我应该总是使用下面的语法吗?(如果是,为什么?)

{
    "precision": "zip"
}

我在JSON规范中还没有找到这方面的内容,尽管在示例中他们在键的两边使用了引号。

ddhy6vgd

ddhy6vgd1#

是的,你需要引号,这是为了使它更简单,并且避免对javascript保留关键字(即{for:"foo"})使用另一种转义方法。

lztngnrs

lztngnrs2#

使用字符串作为密钥是正确的。以下是 *RFC 4627 -JavaScript对象表示法(JSON)的应用程序/json媒体类型 * 的摘录
2.2.对象
对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后面有一个冒号,将名称与值分隔开。一个逗号将值与后面的名称分隔开。对象中的名称应该是唯一的。
第一个月
member = string name-separator value
[...]
2.5.字符串
字符串的表示类似于C族编程语言中使用的约定。字符串以引号开始和结束。[...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
阅读整个RFC here

2hh7jdfx

2hh7jdfx3#

来自2.2.对象
对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是字符串。
以及2.5中的字符串
字符串以引号开始和结束。
所以我会说,按照标准:是的,你应该总是引用关键字(虽然有些解析器可能更宽容)

83qze16e

83qze16e4#

是的,必须使用引号。http://json.org/表示:

string
    ""
    " chars "
ig9co6j1

ig9co6j15#

是的。但是如果你需要其他的东西,请检查JSON 5
JSON5是JSON的超集,支持ES 5语法,包括:

    • 不带引号的 * 属性键
  • 单引号、转义字符串和多行字符串
  • 备用号码格式
  • 评论
  • 额外空白

JSON 5参考实现(json5 npm package)提供了一个JSON5对象,该对象具有parsestringify方法,这些方法的参数和语义与内置的JSON对象相同。
JSON 5用于许多高端项目:
JSON 5于2012年推出,截至2022年,每周下载量超过6500万次,在npm上最受依赖的软件包中排名前0.1%,并被Chromium、Next.js、Babel、Retool、WebStorm等大型项目采用,在MacOS和iOS等苹果平台上也得到了原生支持。
~ json5.org主页

mznpcxlj

mznpcxlj6#

在您的情况下,这两种方法都是有效的,这意味着这两种方法都将起作用。
但是,您仍然应该在键名中使用带引号的键名,因为它更传统,这会使键名更简单,并且可以使用白色等。
因此,请使用带引号的那个。
编辑//检查此:What is the difference between JSON and Object Literal Notation?

ua4mk5z4

ua4mk5z47#

既然你可以使用“parent.child”点标记,而你不必使用parent[“child”],这也是有效和有用的,我想说这两种方式在技术上都是可以接受的。解析器应该可以很好地使用这两种方式。如果你的解析器不需要在键上加引号,那么最好不要加引号(节省空间)。称它们为字符串是有意义的,因为它们就是字符串,而且由于方括号本质上给了你使用键的值的能力,所以不这样做是完全有意义的。在Json中你可以把...

>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};

>obj
Object {someKey: "someValue"}

如果你需要一个键的值,没有引号就不行,所以如果不行,你就不能,所以你就不会这么做,所以“你不需要在键上加引号”。即使说它们在技术上是字符串是正确的。逻辑和用法却不这么认为。它也没有正式输出Object {“someKey”:示例中obj的“someValue”}从任何浏览器的控制台运行。

相关问题