JSON.parse正在从JSON对象中删除2个对象

时间:2016-06-25 17:38:08

标签: javascript json

我目前正在经历这个奇怪的问题。

我有一个有效的JSON对象:

var myjson = '[{"text": {"tag": "question","content": "question content 1"}}, {"text": {"tag": "answer","content": "answer content1"},"text": {"tag": "question","content": "question content 2"},"text": {"tag": "answer","content": "answer content2"}}]';

然后我继续将其转换为正常的javascript对象数组,如下所示:

var parsed = JSON.parse(myjson);
console.log(parsed);

由于一些奇怪的原因,解析后的数组只包含第一个和最后一个对象....

我为这个here

准备了一个小提琴

4 个答案:

答案 0 :(得分:2)

您多次使用相同的密钥,最后一个密钥将覆盖所有以前的密钥。使用唯一键或将这些键的值放在数组中。在this post中,有一个指向原始规范的链接,声明应该是这种情况。

修改:here's an example fiddle

var myjson = '[{"text": {"tag": "question","content": "question content 1"}}, {"text1": {"tag": "answer","content": "answer content1"},"text2": {"tag": "question","content": "question content 2"},"text3": {"tag": "answer","content": "answer content2"}}]';

// OR
var myjsonarray = '[{"text": {"tag": "question","content": "question content 1"}}, [{"tag": "answer","content": "answer content1"}, {"tag": "question","content": "question content 2"},{"tag": "answer","content": "answer content2"}]]'

答案 1 :(得分:1)

JSON对象如下所示

public JSONObject(Map<?, ?> map) {
    this.map = new HashMap<String, Object>();
    if (map != null) {
        for (final Entry<?, ?> e : map.entrySet()) {
            final Object value = e.getValue();
            if (value != null) {
                this.map.put(String.valueOf(e.getKey()), wrap(value));
            }
        }
    }
}

JSON对象基本上是包含键值对的哈希映射。

当我们一次又一次地提供相同的密钥时,它会被覆盖。所以,你只得到第一个和最后一个值。

如果您仍希望使用相同的名称并拥有一个包装器,则可以尝试使用此

[
 {"text": 
   {"tag": "question","content": "question content 1"}
 }, 
 [
   {"text": 
      {"tag": "answer","content": "answer content1"}
   }, 
   {"text": 
      {"tag": "question","content": "question content 2"}
   },
   {"text": 
      {"tag": "answer","content": "answer content2"}
   }
 ]
]

深入了解此JSON Object java implementation

答案 2 :(得分:0)

JSON文件可能有效,但这并不意味着它具有您希望拥有的结构;)

现在,数组确实包含两个对象。在第二个对象中,您将“文本”定义三次,每次都会覆盖前一个声明。所以你有第一个文本,然后第二个和第三个被第四个文本覆盖。

答案 3 :(得分:0)

您已经给出了每个键同名的问题。 Working Fiddle

var myjson = '[{"text1": {"tag": "question","content": "question content 1"}}, {"text2": {"tag": "answer","content": "answer content1"},"text3": {"tag": "question","content": "question content 2"},"text4": {"tag": "answer","content": "answer content2"}}]';

console.log(myjson);
var parsed = JSON.parse(myjson);
console.log(parsed);