2016-05-04 92 views
1

我收到此错误信息:JSON.parse数组元素嵌套不工作

SyntaxError: JSON.parse: expected ',' or ']' after array element at line 4 column 18 of the JSON data.

我想是因为我有一个数组中的对象,也许这是不允许的。但我需要经验丰富的开发人员对此进行确认。你可以把对象放在json数组中吗?

HTML

<div id="ex1"><h2>Example 1</h2><p></p><h4>results:</h4></div> 

的Javascript

var message; 

    (function loadAjax() 
    { var request; 
     if (window.XMLHttpRequest) 
      { 
       request = new XMLHttpRequest(); 
      } 
    else{ 

     request = new ActiveXObject('Microsoft,XMLHTTP'); 
    } 

    request.open('GET','human.json'); 

    request.onreadystatechange = function() 
    { 
     if(request.readyState == 4 && request.status == 200) 
      { 

       message = request.responseText; 
       var obj = JSON.parse(message); 
       var text = obj.job[0].hospital; 
       attach('ex1',text,'p'); 
      } 
    } 

    request.send(); 

    })(); 

JSON

{ 
    "sex":{"male":{"fname":["Michael","Tom"]} ,"female":{"fname":["Alice","Katie"]}}, 
    "age":[16,80], 
    "job":["medical":{"hospital": "doctor"}, "education":{"school":"teacher"} ] 
} 
+0

你的'job'属性包含无效的类似assotiative的数组,其中包含像'medical'和'education'这样的类似对象的键。有效数组的一个例子是具有'age'键的属性。'job'属性可能应该包含一个对象而不是数组。 –

+2

你刚刚在其他地方发布。为什么不让他们在同一个问题? http://stackoverflow.com/questions/37017756/json-parse-expected-or-after-property-value-in-object/37017795#37017795 –

+0

@Wes Foster,这实际上是一个关于我有一个数组的问题JSON。但是,我不知道你可以继续添加上一个你已经提出的问题 –

回答

3

这是不正确的:

"job":["medical":{"hospital": "doctor"}, "education":{"school":"teacher"} ] 

这是正确的:

"job": {"medical": {"hospital": "doctor"}, "education": {"school": "teacher"} } 

通知我改变了[]{}

方括号用于阵列(许多单个项目)。示例:

{ "my_array": [1, 2, "three"] }  <-- Notice that the items in square brackets 
             so not assign a value such as "key": "value" 

卷曲用于关联条目(许多"key": "value"条目)。例如:

{ "my_association": { "dogs": "rule", "cats": "drool" } } 

请参考JSON.org了解更多关于JSON正确语法的信息。

+0

快速问题,你可以做我在对象中的数组吗?或者它是JSON和javascript对象中的错误语法吗? –

+0

两者在技术上都是一样的,它们是一个“哈希”。最大的不同之处在于,通过关联条目,您可以为关键字指定一个名称。使用普通数组(在方括号中),您不会为键分配名称。 –

+0

'“job”:[{“medical”:{“hospital”:“doctor”}},{“education”:{“school”:“teacher”}}]' 是原本的操作,但他只是忘了在{}中包装它们的键值对。 –

0

您的job属性包含一个无效的关联式数组,其中包含类似于对象的键,例如medicaleducation。有效数组的示例是age键的属性。 job属性应该可能包含一个对象而不是数组。

JavaScript数组只是一个没有显式键的值列表(["foo", "bar"])。如果您需要key:value对,请使用对象({"a" : "foo", "b" : "bar"})。

顺便说一下,自动生成JSON(不是手动)通常是有意义的,例如,g。使用PHP的内置函数json_encode(),以便生成的JSON代码保证有效。

0

您需要纠正你:

{ 
    "sex":{"male":{"fname":["Michael","Tom"]} ,"female":{"fname":["Alice","Katie"]}}, 
    "age":[16,80], 
    "job":["medical":{"hospital": "doctor"}, "education":{"school":"teacher"} ] 
} 

到:

{ 
    "sex":{"male":{"mname":["Michael","Tom"]},"female":{"fname":["Alice","Katie"]}}, 
    "age":[16,80], 
    "job":[{"medical":{"hospital":"doctor"}},{"education":{"school":"teacher"}}] 
} 

的情况下,你真的想保留原始的结构&访问的想法。