首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有列表和字典的嵌套JSON

带有列表和字典的嵌套JSON
EN

Stack Overflow用户
提问于 2021-02-26 03:05:27
回答 2查看 251关注 0票数 1

我正在尝试将嵌套的JSON提取到具有以下结构的数据帧中:

代码语言:javascript
运行
复制
[
{'id': '1','sort': 'kg', 'name': 'meal','detail': 
   [
       {'subid': 'A', 'name': 'Example','values': 
       [
          {'value': '3', 'time': 0320},
          {'value': '4', 'time': 0330},

我试着用json_normalize进行抽取,但是我被第二层的‘值’卡住了。我认为这与normalize可以使用的级别数量有关。有没有其他方法可以将这种结构放入数据帧中?

我的代码是:

代码语言:javascript
运行
复制
myJsonResponse = json.loads(response.content)
objects = pd.json_normalize(myJsonResponse, record_path='detail', meta=['id','sort','name'], errors='ignore', meta_prefix='data_')
objects.explode('values')

enter image description here

EN

回答 2

Stack Overflow用户

发布于 2021-02-27 03:24:58

它不像一行代码那么优雅,但它可以处理多个嵌套层次:

代码语言:javascript
运行
复制
jsondata = [
        {'id': '1','sort': 'kg', 'name': 'meal','detail': 
            [
                {'subid': 'A', 'name': 'Example','values': 
                    [
                        {'value': '3', 'time': 320},
                        {'value': '4', 'time': 330},
                        {'value': '5', 'time': 340}
                    ]
                }
            ]
        }
    ]

import pandas as pd

rows = []
for d1 in jsondata:
    row = {}
    row.update( d1 )
    del row['detail']
    for d2 in d1['detail']:
        row['subid'] = d2['subid']
        row['namex'] = d2['name']
        for d3 in d2['values']:
            row.update(d3)
            rows.append( row )

o = pd.DataFrame(rows)
print(o)
票数 0
EN

Stack Overflow用户

发布于 2021-03-15 11:23:01

您可以使用flatten_json

代码语言:javascript
运行
复制
from flatten_json import flatten

jsondata = [
        {'id': '1','sort': 'kg', 'name': 'meal','detail': 
            [
                {'subid': 'A', 'name': 'Example','values': 
                    [
                        {'value': '3', 'time': 320},
                        {'value': '4', 'time': 330},
                        {'value': '5', 'time': 340}
                    ]
                }
            ]
        }
    ]

    
dic_flattened = (flatten(d, '.') for d in jsondata)
df = pd.DataFrame(dic_flattened)

输出

代码语言:javascript
运行
复制
  id sort  name detail.0.subid detail.0.name detail.0.values.0.value  detail.0.values.0.time detail.0.values.1.value  detail.0.values.1.time detail.0.values.2.value  detail.0.values.2.time
0  1   kg  meal              A       Example                       3                     320                       4                     330                       5                     340
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66374883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档