尝试使用python字典重新格式化JSON数据

时间:2018-02-22 14:23:06

标签: python json dictionary

我一直在尝试格式化来自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

3 个答案:

答案 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)构造。