使用 python 将嵌套 json 转换为平面 json 时遇到困难

Posted

技术标签:

【中文标题】使用 python 将嵌套 json 转换为平面 json 时遇到困难【英文标题】:Having difficulty in transforming nested json to flat json using python 【发布时间】:2019-12-20 13:45:05 【问题描述】:

我有以下 API 响应。这是一个非常小的子集,我在这里粘贴以供参考。这上面可以有 80 多列。


[["name","age","children","city", "info"], ["Richard Walter", "35", ["Simon", "Grace"], "mobile":"yes","house_owner":"no"],
["Mary", "43", ["Phil", "Marshall", "Emily"], "mobile":"yes","house_owner":"yes", "own_stocks": "yes"],
["Drew", "21", [], "mobile":"yes","house_owner":"no", "investor":"yes"]]

最初我认为 pandas 可以在这里提供帮助并相应地进行搜索,但作为 python/编码的新手,我无法从中获得太多帮助。感谢您提供任何帮助或指导。

我希望以 JSON 键值对格式输出,如下所示。

"name":"Mary", "age":"43", "children":["Phil", "Marshall", "Emily"],"info_mobile":"yes","info_house_owner":"yes", "info_own_stocks": "yes",
"name":"Drew", "age":"21", "children":[], "info_mobile":"yes","info_house_owner":"no", "info_investor":"yes"]```

【问题讨论】:

【参考方案1】:

我假设第一个列表总是标题(列名)? 如果是这样的话,也许这样的事情可以奏效。

import pandas as pd
data = [["name", "age", "children", "info"], ["Ned", 40, ["Arya", "Rob"], "dead": "yes", "winter is coming": "yes"]]

headers = data[0]
data = data[1:]

df = pd.DataFrame(data, columns=headers)
df_json = df.to_json()
print(df)

【讨论】:

感谢@Atle,但是使用上面的代码,嵌套的 json/dict 在一列下被引用,即信息。我希望我们是否可以使用各自的键和值获取单独的信息列。 ``` 姓名年龄儿童信息 0 Ned 40 [Arya, Rob] u'winter is come': u'yes', u'dead': u'yes' ``` 我明白了。那不知道能不能用pandas。 是否还有其他模块可以实现这一点。 我想不到。为什么要以这种方式格式化数据? 我想要这种格式的数据,以便将数据推送到 redshift postgrsql 表中变得更容易,并且列映射变得更容易。因为“信息”字典键对任何用户都有很多价值,我们不会将所有这些都放在一个列下,因为很难在该列上查询或稍后使用该列创建仪表板【参考方案2】:

假设第一个列表总是代表键["name", "age"... etc] 然后随后的列表代表实际的数据/API 响应,然后您可以像这样构造一个字典(键对值)。

keys = ["name", "age", "children", "info"]
api_response = ["Richard Walter", "35", ["Simon", "Grace"], "mobile":"yes","house_owner":"no"]
data_dict = k: v for k, v in zip(keys, api_response)

【讨论】:

谢谢@Omar。但这给了我一个回复:``` 'info': 'mobile': 'yes', 'house_owner': 'no', 'age': '35', 'name': 'Richard Walter', 'children': ['Simon', 'Grace'] ``` 而我正在寻找响应为 ``` 'info_mobile': 'yes', 'info_house_owner': 'no', 'age': '35 ','名字':'理查德沃尔特','孩子':['西蒙','格蕾丝']```

以上是关于使用 python 将嵌套 json 转换为平面 json 时遇到困难的主要内容,如果未能解决你的问题,请参考以下文章

平面 json 到嵌套 json python

如何将 JSON 对象的嵌套部分转换为点链式平面 JSON?

使用jolt变换并将平面json转换为复杂的嵌套json数组

我如何将平面数据框转换为 spark(scala 或 java)中的嵌套 json

使用 Python 将 4 级嵌套 JSON 文件转换为 1 级嵌套

使用 Python 将多个关系表转换为嵌套 JSON 格式