将标记值添加到JSON

时间:2015-02-24 18:00:07

标签: python json

我有来自API的JSON响应。 JSON响应,'结果'是一个列表,其中包含许多单独的结果,称为“路线'”。

对于每个结果,在结果JSON响应中,我希望添加更多信息,例如从API生成此响应的请求中包含的内容。

此处显示了总体结果中三个缩短结果('路线')的示例:

results = 
[({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                          u'lng': value},
                           u'southwest': {u'lat': value,
                                          u'lng': value}},
               u'copyrights': u'value',
               u'overview_polyline': {u'points': u’value’},
               u'summary': u’value’,
               u'warnings': [],
               u'waypoint_order': []}],
  u'status': u'OK'}),
({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                              u'lng': value},
                               u'southwest': {u'lat': value,
                                              u'lng': value}},
                   u'copyrights': u'value',
                   u'overview_polyline': {u'points': u’value’},
                   u'summary': u’value’,
                   u'warnings': [],
                   u'waypoint_order': []}],
      u'status': u'OK'}),
({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                              u'lng': value},
                               u'southwest': {u'lat': value,
                                              u'lng': value}},
                   u'copyrights': u'value',
                   u'overview_polyline': {u'points': u’value’},
                   u'summary': u’value’,
                   u'warnings': [],
                   u'waypoint_order': []}],
      u'status': u'OK'})]

我希望添加各自的价值观。对于3个结果的上述示例,有3个原点坐标,例如:

origincoords = ['51.41833327,0.115963078', '51.34666046,-0.210947524', '51.39574919,-0.045778021']    

更新 - 感谢Martineau,我已经能够正确插入值。但是,我现在很好奇如何插入到不同的位置。例如,要实现:

最终结果看起来像 -

({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                              u'lng': value},
                               u'southwest': {u'lat': value,
                                              u'lng': value},
                               u'origincoords': '51.39574919,-0.045778021'},
                   u'copyrights': u'value',
                   u'overview_polyline': {u'points': u’value’},
                   u'summary': u’value’,
                   u'warnings': [],
                   u'waypoint_order': []}],
      u'status': u'OK'})]

3 个答案:

答案 0 :(得分:1)

这是一种简单的方法,无需任何拉链

for index in range(len(results)):
    results[index][u'origincoords'] = origincoords[index]

答案 1 :(得分:1)

你说的你想要的东西没有意义:

({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                              u'lng': value},
                               u'southwest': {u'lat': value,
                                              u'lng': value}},
                   u'copyrights': u'value',
                   u'overview_polyline': {u'points': u’value’},
                   u'summary': u’value’,
                   u'warnings': [],
                   u'waypoint_order': []}],
      u'status': u'OK'}
      u'origincoords': '51.39574919,-0.045778021'})]

但这样做:

({u'routes': [{u'bounds': {u'northeast': {u'lat': value,
                                              u'lng': value},
                               u'southwest': {u'lat': value,
                                              u'lng': value}},
                   u'copyrights': u'value',
                   u'overview_polyline': {u'points': u’value’},
                   u'summary': u’value’,
                   u'warnings': [],
                   u'waypoint_order': []}],
      u'status': u'OK',  # NOT the end of the dict
      u'origincoords': '51.39574919,-0.045778021'})]

使用izip(或zip)获取后者的简单方法是:

try:
    from itertools import izip
except ImportError:
    izip = zip  # Python 3

origincoords = ['51.41833327,0.115963078',
                '51.34666046,-0.210947524',
                '51.39574919,-0.045778021']

for route, origincoord in izip(results, origincoords):
    route['origincoord'] = origincoord

<强>更新

如果你想将这些对插入'bounds'[0]字典中'routes'字典中的每个字典的results列表中的for route, origincoord in izip(results, origincoords): route['routes'][0]['bounds']['origincoord'] = origincoord 字典中列表,可以通过使用以下内容完成:

[

请注意,列表和词典都使用x ] x表示法来访问其内容。 {{1}} 必须求值为列表的整数索引,或者是字典的可散列对象(例如字符串,整数,元组等)。

答案 2 :(得分:0)

zip函数返回元组列表,其中第i个元组包含每个参数序列的第i个元素。要在结果中添加坐标,您可能希望迭代此元组列表并将其分配给for循环:

for result, coord in zip(results, origincoords):
    result[u'origincoords'] = coord