0

我试图以 json 格式向我的 php 服务器发送一些电子邮件,但是当我验证该 json 时,它显示了一些错误

 {"function":"contacts", "parameters": {"emails": "(
     "John@mac.com",
     "anna@gmail.com",
     "hank@mac.com"
  )","user_id": "90"},"token":""}

错误显示为 -

 Parse error on line 4:
  ...{        "emails": "(         "John@ma
  ----------------------^
   Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
4

5 回答 5

2

您需要对所有数组使用方括号。现在您正在使用括号,并且还以引号开头,表示字符串而不是数组。

要么你希望整个值是一个字符串,你应该用“\”转义字符串中的引号,或者你应该删除引号并用方括号替换括号。

注意:上面突出显示的语法应该暗示你哪里出错了。

于 2013-07-22T16:19:37.297 回答
1

您需要将 JSON 更改为以下内容。或者您需要转义电子邮件地址周围的双引号。

 {"function":"contacts", "parameters": {"emails": [
     "John@mac.com",
     "anna@gmail.com",
     "hank@mac.com"
  ],"user_id": "90"},"token":""}
于 2013-07-22T16:21:23.913 回答
0

您的数组似乎用"(...分隔,)"而不是[.. ]。除其他外,这使得其中的字符串“由内向外”。如果您希望它一个类似于数组的带引号的字符串,则需要转义其中的引号例如foo \"and\" bar. http://www.json.org/上的流程图​​非常有用,因为它是一个非常小的规范。

于 2013-07-22T16:19:58.530 回答
0

您的emails元素被定义为以 开头"(和结尾的字符串)"

在该字符串中,您将拥有单独的字符串,每个字符串都以引号开头和结尾。

这显然是不正确的。

你可能想要的是"emails" : [ ...... ]

(... 除非您实际上打算将emails元素作为字符串,在这种情况下,其中的引号需要转义为\",换行符也是\n. 但我认为这不是您的意图,是吗? )。

这就是您收到语法错误的原因。

但是我想这里的关键点是这样的问题说明了为什么手写 JSON 代码(或者实际上是其他基于文本的语法,如 XML)是一个坏主意。您应该始终使用编码器或解码器从您正在使用的语言中创建 JSON 字符串。这将避免你不得不处理这样的问题;如果您使用编码器,您的 JSON 将始终有效;你不必担心。

希望有帮助。

于 2013-07-22T16:21:42.487 回答
0

我猜你想要:

 {
     "function":"contacts",
     "parameters": {
         "emails": [
             "John@mac.com",
             "anna@gmail.com",
             "hank@mac.com"
         ],
         "user_id": "90"
     },
     "token":""
 }
于 2013-07-22T16:23:04.483 回答