这是我的Json的示例:
text = {"rates":{
"AT":{
"country_name":"Austria",
"standard_rate":20,
"reduced_rates":{
"food":10,
"books":10
}
}
}}
现在“ AT”是国家/地区代码。.它不是固定的。也可以是GB,IT等...
我想解析此Json并从中获取列,如下所示:
rates.AT rates.AT.country_name rates.AT.reducted_rates.food
AT Austria 10
也可以重命名为:
code country_name food
AT Austria 10
例如,在另一个运行中,我有:
text = {"rates":{
"IT":{
"country_name":"Italy",
"standard_rate":20,
"reduced_rates":{
"food":13,
"books":11
}
}
}}
然后它必须是:
rates.IT rates.IT.country_name rates.IT.reducted_rates.food
IT Italy 13
也可以重命名为:
code country_name food
IT Italy 13
我该怎么做?
编辑:
如果可能的话,使用@GPhilo答案,我希望将数据作为Pandas数据框获取。 就像是?
df = pd.DataFrame()
for k,item in dic['rates'].items(): # use iteritems() if you're on Python 2
line = '{};{};{}'.format(k, item['country_name'], item['reduced_rates']['food'])
df = df.append(line, ignore_index=True)
这行不通,因为行不是执行此操作的正确方法。
答案 0 :(得分:2)
一旦解析,json
个对象就是python dict
,因此只需按所需级别遍历键/值对并打印信息即可:
import json
dic = json.loads('''
{"rates":{
"AT":{
"country_name":"Austria",
"standard_rate":20,
"reduced_rates":{
"food":10,
"books":10
}
}
}}
''')
for k,item in dic['rates'].items(): # use iteritems() if you're on Python 2
print('{};{};{}'.format(k, item['country_name'], item['reduced_rates']['food']))
根据需要格式化输出,您需要的三个值是上面代码中format
调用中的三个。
运行示例返回:
AT;Austria;10
解析后,json对象是 python字典:print(dic.__class__)
返回<class 'dict'>
。
要回答问题中的修改,只需附加值即可,而不是附加格式化的字符串:
df = pd.Dataframe(columns=['code', 'country_name', 'food'])
[...]
df = df.append([k, item['country_name'], item['reduced_rates']['food']], ignore_index=True)
答案 1 :(得分:1)
您应该使用dict.keys()
来获取字典中所有键的列表,然后可以对其进行迭代并执行所需的任何操作。
例如:
for k in text.keys():
#do something with text[k] or k itself
还考虑使用dict.items()
来获取密钥对,值:
for k, v in text.items():
#do something with k and v, where text[k] is v
这对python 3很有好处,在python 2中,您应该使用dict.iteritems()