为什么这个JSON无效?

时间:2013-07-22 16:15:45

标签: json

我试图以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', '{', '['

5 个答案:

答案 0 :(得分:2)

您需要为所有数组使用方括号。现在你正在使用括号,你也开始用一个引号来表示一个字符串而不是一个数组。

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

注意:上面的语法突出显示应该提示您出错的地方。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您的数组似乎与"( ... )"分隔,而不是[ .. ]。除此之外,这使得里面的字符串“内外”。如果你意味着它是一个类似于数组的带引号的字符串,你需要转义里面的引号,就像foo \"and\" bar一样。 http://www.json.org/的流程图非常有用,因为它是一个非常小的规范。

答案 3 :(得分:0)

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

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

这显然是不正确的。

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

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

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

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

希望有所帮助。

答案 4 :(得分:0)

我猜你想要:

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