用双引号包围JSON Key的区别是什么""并没有双重报价?

时间:2018-01-10 14:13:14

标签: json typescript ruby-on-rails-5 angular5

这是我的打字稿对象:

{
      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

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

2 个答案:

答案 0 :(得分:1)

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

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

  

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

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

{
    "function": "sqrt"
}

基本上," JSON"密钥未被双引号括起来的代码无效JSON。

答案 1 :(得分:0)

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

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