获取json的嵌套列表和字典的值

时间:2017-12-11 21:43:27

标签: python json

我试图获得'描述'的价值。第一个' x'' y'与json文件中的描述相关,所以我使用了pandas.io.json.json_normalize并在页面末尾跟着this example但是收到错误: KeyError:("尝试使用错误运行='忽略'因为键%s并不总是存在",KeyError(' description',))

我如何获得'描述'的价值? "播放"和#34;游戏"第一个' x'' y'从下面的json文件中分别描述(0,2)和(1,2)并将结果保存为数据框?

我编辑了代码,我希望得到这个结果:

   0  1     2  3
0        Play  Game    
1        
2               
3               
4       

但游戏不在x,y应该是。

import pandas as pd
from pandas.io.json import json_normalize


data = [
            {
            "responses": [
                {
                    "text": [
                        {
                            "description": "Play",
                            "bounding": {
                                "vertices": [
                                    {
                                        "x": 0,
                                        "y": 2
                                    },
                                    {
                                        "x": 513,
                                        "y": -5
                                    },
                                    {
                                        "x": 513,
                                        "y": 73
                                    },
                                    {
                                        "x": 438,
                                        "y": 73
                                    }
                                ]
                            }
                        },
                        {
                            "description": "Game",
                            "bounding": {
                                "vertices": [
                                    {
                                        "x": 1,
                                        "y": 2
                                    },
                                    {
                                        "x": 307,
                                        "y": 29
                                    },
                                    {
                                        "x": 307,
                                        "y": 55
                                    },
                                    {
                                        "x": 201,
                                        "y": 55
                                    }
                                ]
                            }
                        }
                    ]
                }
            ]
        }

    ]
#w is columns h is rows
w, h = 4, 5;

Matrix = [[' ' for j in range(w)] for i in range(h)]


for row in data:
    for response in row["responses"]:
        for entry in response["text"]:
            Description = entry["description"]
            x = entry["bounding"]["vertices"][0]["x"]
            y = entry["bounding"]["vertices"][0]["y"]
            Matrix[x][y] = Description

df = pd.DataFrame(Matrix)
print(df)

1 个答案:

答案 0 :(得分:0)

你需要像这样将data[0]['responses'][0]['text']传递给json_normalize

df = json_normalize(data[0]['responses'][0]['text'],[['bounding','vertices']], 'description')

将导致

     x   y description
0  438  -5        Play
1  513  -5        Play
2  513  73        Play
3  438  73        Play
4  201  29        Game
5  307  29        Game
6  307  55        Game
7  201  55        Game

我希望这是你所期待的。

编辑:

df.groupby('description').get_group('Play').iloc[0]

会为您提供小组的第一项' play'

x               438
y                -5
description    Play
Name: 0, dtype: object