解析JSON响应以表格的形式填充数据

时间:2018-06-08 15:02:00

标签: python json pandas dictionary dataframe

我在<class 'dict'>中有JSON响应。我想迭代JSON响应并形成一个表视图。以下是JSON响应示例。

{'ResultSet': {'Rows': [{'Data': [{'VarCharValue': 'cnt'}, {'VarCharValue': 'id'}, {'VarCharValue': 'val'}]}, {'Data': [{'VarCharValue': '2000'}, {'VarCharValue': '1234'}, {'VarCharValue': 'ABC'}]},{'Data': [{'VarCharValue': '3000'}, {'VarCharValue': '5678'}, {'VarCharValue': 'DEF'}]}]}}

预期输出格式:

 cnt    id     val
2000   1234    ABC
3000   5678    DEF

只能有一行数据,或者列集可以有多行数据(对于提供的样本数据,有两行)。

2 个答案:

答案 0 :(得分:1)

我不确定您是否使用pandas但是您可以使用以下代码轻松地将response dict解析为pandas.DataFrame

import pandas as pd

pd.DataFrame([[entr['VarCharValue'] for entr in r['Data']] for r in response['ResultSet']['Rows'][1:]],
             columns = [r['VarCharValue'] for r in response['ResultSet']['Rows'][0]['Data']])

答案 1 :(得分:1)

我假设您想使用Pandas。由于pd.DataFrame直接接受字典列表,因此您可以将输入字典D重组为字典列表:

cols = [next(iter(i.values())) for i in D['ResultSet']['Rows'][0]['Data']]

d = [{col: j['VarCharValue'] for col, j in zip(cols, i['Data'])}
     for i in D['ResultSet']['Rows'][1:]]

df = pd.DataFrame(d)

print(df)

    cnt    id  val
0  2000  1234  ABC
1  3000  5678  DEF

您可能希望至少将cnt系列转换为数字:

df['cnt'] = pd.to_numeric(df['cnt'])