我有以下json:
{
"slate" : {
"id" : {
"type" : "integer"
},
"name" : {
"type" : "string"
},
"code" : {
"type" : "integer",
"fk" : "banned.id"
}
},
"banned" : {
"id" : {
"type" : "integer"
},
"domain" : {
"type" : "string"
}
}
}
我想弄清楚最佳解码方式,以便有一个易于浏览的python对象呈现它。
我试过了:
import json
jstr = #### my json code above ####
obj = json.JSONDecoder().decode(jstr)
for o in obj:
for t in o:
print (o)
但我明白了:
f
s
l
a
t
e
b
a
n
n
e
d
我不明白这笔交易是什么。理想的是一棵树(甚至是以树木方式组织的列表),我可以以某种方式浏览:
for table in myList:
for field in table:
print (field("type"))
print (field("fk"))
Python的内置JSON API范围是否足以达到此预期?
答案 0 :(得分:10)
您似乎需要帮助迭代返回的对象,以及解码JSON。
import json
#jstr = "... that thing above ..."
# This line only decodes the JSON into a structure in memory:
obj = json.loads(jstr)
# obj, in this case, is a dictionary, a built-in Python type.
# These lines just iterate over that structure.
for ka, va in obj.iteritems():
print ka
for kb, vb in va.iteritems():
print ' ' + kb
for key, string in vb.iteritems():
print ' ' + repr((key, string))
答案 1 :(得分:9)
尝试
obj = json.loads(jstr)
而不是
obj = json.JSONDecoder(jstr)
答案 2 :(得分:4)
答案 3 :(得分:3)
JSONDecoder的签名是
class json.JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[,
parse_constant[, strict[, object_pairs_hook]]]]]]])
并且不接受构造函数中的JSON字符串。看看它的decode()方法。
答案 4 :(得分:2)
这对我来说效果很好,打印比在Thanatos' answer中显式循环对象更简单:
import json
from pprint import pprint
jstr = #### my json code above ####
obj = json.loads(jstr)
pprint(obj)
这使用“Data Pretty Printer”(pprint
)模块,其文档可以找到here。
答案 5 :(得分:1)
示例中提供的字符串无效JSON。
两个结束花括号之间的最后一个逗号是非法的。
无论如何,你应该遵循Sven的建议并改用负载。