给定以下代码:
import json
foo = '{"root":"cfb-score","children":{"gamecode":{"attribute":"global-id"},"gamestate":{"attribute":"status-id","attribute":"status","attribute":"quarter","attribute":"minutes","attribute":"seconds","attribute":"team-possession-id","attribute":"yards-from-goal","attribute":"down","attribute":"distance","attribute":"segment-number","attribute":"active-state"},"gametype":{"attribute":"type","attribute":"detail"},"stadium":{"attribute":"name","attribute":"city","attribute":"state"},"visiting-team:team-name":{"attribute":"alias"},"visiting-team:team-code":{"attribute":"global-id"},"visiting-team:team-rank":{"attribute":"rank"}}}'
bar = json.loads(foo)
print json.dumps(bar)
在使用json.load或json.load时,除了最后一个之外,所有最低级别的"children"都会被截断(或者更可能被覆盖)。为什么?json格式良好,可以在这里进行验证:http://json.parser.online.fr/
输入的一大块:
"children" : {
"gamecode" : {
"attribute" : "global-id"
},
"gamestate" : {
"attribute" : "status-id",
"attribute" : "status",
"attribute" : "quarter",
"attribute" : "minutes",
"attribute" : "seconds",
"attribute" : "team-possession-id",
"attribute" : "yards-from-goal",
"attribute" : "down",
"attribute" : "distance",
"attribute" : "segment-number",
"attribute" : "active-state"
},
转向这个输出块:
"children" : {
"gamecode" : {
"attribute" : "global-id"
},
"gamestate" : {
"attribute" : "active-state"
},
JSON格式良好(即语法有效),但语义无效。在Python dict中,也不能在JS对象中有多个具有相同值的键。如果您在链接到的页面上验证该输入,您将看到"JS eval"窗格还显示"截断"的数据。
如果您想要多个值,请更改数据的格式,使其具有一个带有数组值的键:
"gamestate" : {
"attributes": ["status-id", "status", "quarter", ...]
},
(或者,根据整体数据的情况,您可以让gamestate
键直接链接到数组,而不是在attribute
键下有另一层嵌套。)
JSON不关心对象的键,但JSON.load和JSON.load使用此转换表转换为Python对象。JSON对象变成了python-dict,这意味着您不能有重复的键。