【问题标题】:Merging multiple JSON objects into one JSON object将多个 JSON 对象合并为一个 JSON 对象
【发布时间】:2018-08-22 18:49:38
【问题描述】:

我正在向 REST 服务发出多个请求,并从每个请求中获取 JSON 数据。我想要做的是将所有这些 JSON 对象(希望我使用正确的术语)合并到一个对象中。我该怎么做?

minCount = 1
maxCount = 1000
masterJson = {}
for x in range(36):
    params = {'f': 'json', 'where': 'OBJECTID>='+str(minCount)+'and OBJECTID<='+str(maxCount), 'geometryType': 'esriGeometryPolygon', 'spatialRel': 'esriSpatialRelIntersects','outFields': '*', 'returnGeometry': 'true'}
    r = requests.get('https://hazards.fema.gov/gis/nfhl/rest/services/CSLF/Prelim_CSLF/MapServer/3/query', params)

    cslfJson = r.json()
    masterJson.update(cslfJson)

    for item in cslfJson['features']:
        objCount = item['attributes']['OBJECTID']

        if minCount < objCount:
            break
        else:
        minCount = minCount + maxCount
        maxCount = maxCount + 1000

本质上,它是我想要组合成一个 cslfJson 对象变量的 cslfJson 变量(JSON obj)。

【问题讨论】:

  • 每次运行masterJson.update(cslfJson)都会替换masterJson中的数据,是故意的吗?
  • 没有。这是问题的一部分。我希望它添加 cslfJson 数据的每次迭代,而不是用新数据更新它。
  • 为什么不使用 masterJson = [] 并执行 masterJson.append(cslfJson) 来收集所有响应?
  • 我之前确实考虑过。然后我可以将该 masterJson 列表转换为字典/JSON 对象吗? json.dump() 不这样做吗?
  • 你应该能够 json.dump() 任何有效的 json。你可以在这里jsoneditoronline.org 测试json。对象列表是有效的 json 对象。

标签: json python-3.x merge


【解决方案1】:

在内存中,JSON 对象被视为 dict,因此将每个 JSON obj 视为 dict

masterJson = {}
masterJson['JSON1'] = cslfJson
masterJson['JSON2'] = cslfJson

如果您需要编写一个 .json 文件,您可以将整个 dict 作为参数传递给 JSON 编写器。

【讨论】:

  • 这基本上有效。但是,为每个单独的对象添加新名称会使事情变得有些复杂,因为需要进一步处理(这些对象用于在稍后阶段在 GIS 中创建空间特征)。
  • 您可以使用变量作为键masterJson[variable] = cslfJson。只是键应该是唯一的。
  • 我打开了另一个可以解决我的问题的问题:stackoverflow.com/questions/51989564/…
猜你喜欢
  • 2016-04-30
  • 1970-01-01
  • 2016-02-25
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2017-09-13
  • 1970-01-01
相关资源
最近更新 更多