JSON Key 用双引号 "" 和根本没有双引号有啥区别? [复制]

Posted

技术标签:

【中文标题】JSON Key 用双引号 "" 和根本没有双引号有啥区别? [复制]【英文标题】:What's the difference of JSON Key to be surrounded with double quote "" and no double quote at all? [duplicate]JSON Key 用双引号 "" 和根本没有双引号有什么区别? [复制] 【发布时间】:2018-06-19 17:39:46 【问题描述】:

这是我的打字稿对象:


      first_name:"test",
      last_name: "test",
      birthdate:"2018-01-08T16:00:00.000Z",
      contactNumber: "12312312312",
      email:"test@test.com",
      username:user."test",
      password: user."test"

VS


    "first_name":"test",
    "last_name": "tests",
    "birthdate":"2018-01-08T16:00:00.000Z",
    "contactNumber": "31231232131",
    "email":"email@gmail.com",
    "username":"test",
    "password":"test1234"

每次我使用 Angular 5 通过 HTTP POST 发送它时。我的 API 端总是有错误。

这是错误。

不允许的参数::first_name, :last_name, :birthdate, :contactNumber, :user

当我为所有键添加双引号时,它工作正常。

【问题讨论】:

不要将 javascript 对象(与 Typescript 对象相同)与 JSON 混合 @Pac0 因此,通过将数据传递给 API 而不是传递对象(Typescript 对象),我将创建一个 json 对象并填充它。这可以接受吗?谢谢! 这正是通常的做法。在这方面 Typescript 和 Javascript 没有区别。在 Angular5 中,如果您使用 HttpClient 来执行您的请求,那么 JSON 和实际 javascript 代码对象之间的序列化/反序列化已经为您完成了。 angular.io/guide/http#httpclient 。否则你应该使用 JSON.stringify(yourObject) ***.com/questions/4162749/… 另外,正如另一个答案已经指出的那样,JSON 是一个字符串,必须用引号括起来。 【参考方案1】:

答案在JSON website 上的第一幅图中:对象键必须在 JSON 中编码为字符串。如果它们是标识符(不是字符串),那么它不是 JSON,而是文字 Javascript 对象。

处理 API 请求的 Ruby 库似乎可以正确理解您发送的数据(Javascript 对象)并将密钥转换为 Ruby 符号。验证代码期望键是字符串(因为它们是从有效的 JSON 解码的),因此会出现错误消息。

【讨论】:

【参考方案2】:

根据 JSON 规范(请参阅 http://json.org),您必须用双引号将键括起来。

一个JSON object包含一组字符串/值对,strings定义如下:

字符串是零个或多个 Unicode 字符的序列,用双引号括起来,使用反斜杠转义。

这样你就可以使用保留关键字作为键,如


    "function": "sqrt"

基本上,键没有被双引号括起来的“JSON”代码不是有效的 JSON。

【讨论】:

以上是关于JSON Key 用双引号 "" 和根本没有双引号有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

js 实现动态key value(JSON字符串注意事项:key和value都要用双引号,官网指定用双引号)

json文件中的“期望用双引号括起来的属性名称”

请教jsonJSON.parse中双引号如何解决

Java:想要解析JSON,但是遇到好多双引号,该如何处理

Django 模板无法访问重复引号中的 JSON Key: " 'Key' ": " Value "

JSON的键究竟需要用双引号括起来吗