【问题标题】:How to Combine two JSON files? [duplicate]如何合并两个 JSON 文件? [复制]
【发布时间】:2017-11-17 15:47:43
【问题描述】:

我有两个 json 对象,我正在想办法在 python 中合并它们

y={"success":"true"}
x={"0":"740","1":"747","2":"883","3":"750","4":"769"}

我需要以下方式的最终结果

{"success":"true",
  "data":{
       "0":"740",
       "1":"747",
       "2":"883", 
       "3":"750", 
       "4":"769"
         }
              }

我正在尝试附加它,但它显示了一些错误。帮我写python代码。

【问题讨论】:

  • 这些只是 2 个字典。为什么不只是y['data'] = x
  • 我尝试时显示以下错误
  • 'str' 对象不支持项目分配
  • 我尝试将 x 附加到 y 中,但不起作用!:(
  • 如果它们是 json(这意味着它们可能是字符串),那么首先使用 json.loads 将它们都转换为 python dict,然后合并这些 dict,最后使用 json.dumps 将它们转换回 json

标签: python json join


【解决方案1】:

您的输入似乎是字符串而不是字典。您需要使用json.loads 将它们转换为字典:

import json

y = '{"success":"true"}'
x = '{"0":"740","1":"747","2":"883","3":"750","4":"769"}'

res = json.loads(y)
res['data'] = json.loads(x)

print(res)

如果您需要再次以字符串形式输出,请使用json.dumps:

res_str = json.dumps(res)

如果您坚持对输出进行排序:

res_str = json.dumps(res, sort_keys=True)

【讨论】:

  • 获取输出为 {"data": {"1": "747", "0": "740", "3": "750", "2": "883", " 4": "769"}, "success": "true"},为什么 1 出现在 0 前面?
  • 字典是无序的。例如,请参阅this
  • 因为python dicts,根据定义是没有顺序的。如果您需要订购 dict,您可以按键对其进行排序或使用 ordereddict 之类的东西,在这种情况下,转换当然会变得更加复杂。
  • @SandeepRajamahendravarapu:添加了一种使用json.dumps 对输出进行排序的方法。但这只会涉及json字符串;不是字典本身。
【解决方案2】:

你可以简单地做y["data"] = x

y={"success":"true"}
x={"0":"740","1":"747","2":"883","3":"750","4":"769"}

y["data"] = x

【讨论】:

  • 错误:'str' 对象不支持项目分配
  • 在这种情况下,请查看this other answer
【解决方案3】:

我假设它们是字符串而不是 python 字典。所以这是你可以做的

y='{"success":"true"}'
x='{"0":"740","1":"747","2":"883","3":"750","4":"769"}'

import json
dict1 = json.loads(x)
dict2 = json.loads(y)

dict2['data'] = dict1

result = json.dumps(dict2)
print result

上面的代码给你这个

{"data": {"1": "747", "0": "740", "3": "750", "2": "883", "4": "769"}, "success": "true"}

如果您想保留 json 字符串中的结构,可以查看 this link。这会使解码稍微复杂一些。

【讨论】:

  • {“1”:“747”,“0”:“740”,“3”:“750”,“2”:“883”,“4”:“769”,“ data": {"success": "true"}} 输出错误!
  • 稍微更改了代码以适应输出。我还提到了在我对其他答案的评论中使用直接从 json 字符串创建的有序字典的链接。如果有帮助,请告诉我。
猜你喜欢
  • 2020-12-25
  • 1970-01-01
  • 2018-09-13
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
相关资源
最近更新 更多