我一直在尝试格式化来自API的实时JSON数据,以便在Django视图中读取。但是,数据来得有点复杂。
我有格式的传入JSON数据
{ Time1:
{'A':'Value',
'B':'Value',
}
Time2:
{'A':'Value',
'B':'Value',
}
there are multiple time records....
}
我需要将其转换为
{
'Time': Time1
'A' : 'Value'
'B' : 'Value'
},
{
'Time': Time2
'A' : 'Value'
'B' : 'Value'
},
{
'Time': Time3
'A' : 'Value'
'B' : 'Value'
},
{
'Time': Time4
'A' : 'Value'
'B' : 'Value'
},...and so on
答案 0 :(得分:0)
假设您的数据采用正确的dict
格式传入。你可以这样做
in_json = { 2014: {'A':'Value', 'B':'Value'}, 2015: {'A':'Value', 'B':'Value'}}
newl = list()
for k in in_json:
x = dict({'Time':k})
x.update(in_json[2014])
newl.append(x)
基本上只是将原始字典中的key
作为值添加到字典并将其附加到列表中
答案 1 :(得分:0)
如评论中所述,指示的输出格式是一个列表。 在这种情况下,您只需为每个嵌套字典添加“Time”的新条目:
final_list = []
for key, subdict in in_dict.iteritems():
subdict["Time"] = key
final_list.append(subdict)
或者如果您更喜欢内联:
final_list = [dict([("Time", key)] + sub.items()) for key, sub in in_dict.iteritems()]
答案 2 :(得分:0)
您可以使用list comprehension结构,(以下代码已使用 Python3.6 进行了测试):
# Given your JSON has successfully been parsed into a dictionary
> input={'Time1': {'A':'Value1A', 'B':'Value1B'}, 'Time2': {'A','Value2A', 'B', 'Value2B'}}
# Iterate over the dictionary and build a new item out of each key/value couple
> transformed=[(v.update({'Time': k}) or v) for (k, v) in input.items()]
> print(transformed)
[
{
'A' : 'Value1A'
'B' : 'Value1B'
'Time': 'Time1'
},{
'A' : 'Value2A'
'B' : 'Value2B'
'Time': 'Time2'
}, …
]
(v.update({'Time': k}) or v)
会发生什么?
鉴于v
是一个字典,v.update(...)
将向实例添加一个新条目(换句话说,它会改变实例)。这个方法不会返回实例,但是None
,幸运的是,在括号之间包装调用可以构建一个最终返回v
实例的表达式。 v
是一个dict对象(假设它不是空的),它将在布尔上下文中真实地计算,因此(… or v)
构造。