关于打字稿:用双引号“”包围的JSON键有什么区别,根本没有双引号?

What's the difference of JSON Key to be surrounded with double quote “” and no double quote at all?

本问题已经有最佳答案,请猛点这里访问。

这是我的打字稿对象:

1
2
3
4
5
6
7
8
9
{
      first_name:"test",
      last_name:"test",
      birthdate:"2018-01-08T16:00:00.000Z",
      contactNumber:"12312312312",
      email:"[email protected]",
      username:user."test",
      password: user."test"
}

VS

1
2
3
4
5
6
7
8
9
{
   "first_name":"test",
   "last_name":"tests",
   "birthdate":"2018-01-08T16:00:00.000Z",
   "contactNumber":"31231232131",
   "email":"[email protected]",
   "username":"test",
   "password":"test1234"
}

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

这是错误。

Unpermitted parameters: :first_name, :last_name, :birthdate, :contactNumber, :user

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


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

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

A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.

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

1
2
3
{
   "function":"sqrt"
}

基本上,键不包含双引号的"JSON"代码不是有效的JSON。


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

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