【问题标题】:JSON.parse array nested element not workingJSON.parse 数组嵌套元素不起作用
【发布时间】:2016-05-04 16:30:26
【问题描述】:

我收到此错误消息:

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

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

【问题讨论】:

  • 您的job 属性包含无效的类关联数组,其中包含medicaleducation 等类对象键。一个有效数组的例子是带有age 键的属性。 job 属性可能应该包含一个对象而不是数组。
  • 你刚刚在别处发布了这个。为什么不把它们放在同一个问题上呢? stackoverflow.com/questions/37017756/…
  • @Wes Foster,这实际上是关于我在 json 中的数组的不同问题。但是,我不知道您可以继续添加您之前提出的问题
  • 这不是有效的 JSON。您是手动构建的吗?
  • @EatPeanutButter 是的,我是。有没有更好的方法来构建它?

标签: javascript arrays json


【解决方案1】:

这是不正确的:

"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 正确语法的信息。

【讨论】:

  • 快速提问,您是否可以使用我在对象中的数组,或者它在 JSON 和 javascript 对象中的语法错误?
  • 两者在技术上是相同的,它们是Hash。最大的不同是,对于关联条目,您正在为键分配一个名称。使用普通数组(在方括号中),您不会为键分配名称。
  • "job":[{"medical":{"hospital":"doctor"}},{"education":{"school":"teacher"}}] 是 op 最初的目标,但他只是忘记将键值对包装在 {} 中。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您需要更正您的:

    {
      "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"}}]
    }
    

    如果您真的想保留您对结构和访问的原始想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2019-05-12
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多