TypeScript - JSON 键被双引号 "" 包围和完全没有双引号有什么区别?
这是我的 TypeScript 对象:
{
first_name:"test",
last_name: "test",
birthdate:"2018-01-08T16:00:00.000Z",
contactNumber: "12312312312",
email:"[email ",
username:user."test",
password: user."test"
}
对
{
"first_name":"test",
"last_name": "tests",
"birthdate":"2018-01-08T16:00:00.000Z",
"contactNumber": "31231232131",
"email":"[email ",
"username":"test",
"password":"test1234"
}
每次我使用 Angular 5 通过 HTTP POST 发送它时,我的 API 端总是会出错。
这是错误。
未经允许的参数::first_name, :last_name, :birthdate, :contactNumber, :user
当我给所有键添加双引号时,它可以正常工作。
答案#1
根据 JSON 规范(见 http://json.org),你必须用双引号将键括起来。
JSON 对象包含一组字符串/值对,并且字符串定义如下:
字符串是由零个或多个 Unicode 字符组成的序列,用双引号括起来,并使用反斜杠转义。
那是为了让你可以将保留关键字用作键,例如
{
"function": "sqrt"
}
基本上,键没有用双引号括起来的“JSON”代码不是有效的JSON。
答案#2
答案在 JSON 网站的第一张图中:对象键在 JSON 中必须作为字符串进行编码。如果它们是标识符(不是字符串),那么它就不是 JSON,而是一个字面量的 Javascript 对象。
看起来处理 API 请求的 Ruby 库能够正确理解你发送的数据(一个 Javascript 对象)并将键转换为 Ruby 符号。验证代码期望键是字符串(因为它们是从有效的 JSON 解码的),因此会出现错误信息。
