首页 > 解决方案 > 如何使用 Python 组合来自不同数组的 JSON 对象

问题描述

我正在尝试使用 Python 遍历不同的 JSON 数组,以便将所有对象组合成一个数据结构。JSON 看起来像这样:

data = {
  "Wednesday, Apr 3, 2019": [
    {
      "id": "000",
      "keyid": "4273666087",
      "name": "Raptor",
      "symbol": "RPT",
    },
    {
      "id": "111",
      "keyid": "1818114564",
      "name": "Duck",
      "symbol": "DUK",
    }
  ],
  "Tuesday, Apr 2, 2019": [
    {
      "id": "222",
      "keyid": "8032408148",
      "name": "Hawk",
      "symbol": "HWK",
    },
    {
      "id": "333",
      "keyid": "0362766431",
      "name": "Goose",
      "symbol": "GOO",
    }
  ]
}

因为它看起来像一本字典,所以我尝试这样做:

for item in data.values():
   print(item)
   print("\n")

它将每个数组的对象组合成一个单独的列表。但我希望所有对象都属于同一个数据结构,以便最终结果看起来像这样:

id  | keyid      | name   | symbol
-----------------------------------
000 | 4273666087 | Raptor | RPT
-----------------------------------
111 | 1818114564 | Duck   | DUK
-----------------------------------
222 | 8032408148 | Hawk   | HWK
-----------------------------------
333 | 0362766431 | Goose  | GOO
-----------------------------------

这样做的最佳方法是什么?

标签: pythonarraysjsonpython-3.xloops

解决方案


使用pandas

import pandas as pd
df = pd.DataFrame([x for k,v in data.items() for x in v])
print(df)

输出:

    id       keyid    name symbol
0  000  4273666087  Raptor    RPT
1  111  1818114564    Duck    DUK
2  222  8032408148    Hawk    HWK
3  333  0362766431   Goose    GOO

你可以在常规 Python 中做到这一点,但这会很麻烦,所以我支持使用pandaswhich 可以在一行中完成。

正如你想要的嵌套循环:

import pandas as pd
l = []
for k,v in data.items():
    for x in v:
        l.append(x)
df = pd.DataFrame(l)
print(df)

推荐阅读