我目前正在经历这个奇怪的问题。
我有一个有效的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
准备了一个小提琴答案 0 :(得分:2)
您多次使用相同的密钥,最后一个密钥将覆盖所有以前的密钥。使用唯一键或将这些键的值放在数组中。在this post中,有一个指向原始规范的链接,声明应该是这种情况。
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"}
}
]
]
答案 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);