JSON.parse数组嵌套元素不起作用

时间:2016-05-04 16:30:26

标签: javascript arrays json

我收到此错误消息:

  

SyntaxError:JSON.parse:在JSON数据的第4行第18列的数组元素后面的'expected','或']'。

我认为这是因为我在一个数组中有一个对象,也许这是不允许的。但我需要经验丰富的开发人员对此进行确认。你能把对象放在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"} ]
}

3 个答案:

答案 0 :(得分: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"

Curlies用于关联条目(许多"key": "value"个项目)。例如:

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

请参阅JSON.org以了解有关JSON正确语法的更多信息。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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"}}]
}

如果你真的想要保留你对结构的最初想法&amp;访问。