代码之家  ›  专栏  ›  技术社区  ›  data_addict

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

  •  1
  • data_addict  · 技术社区  · 7 年前

    我在一个 <class 'dict'> . 我想遍历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 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    我想你想用熊猫。自从 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'])
    
        2
  •  1
  •   kosnik    7 年前

    我不确定你是否在使用 pandas 但是你可以很容易地解析你的 response 划入一个 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']])