如何从解析的json中提取具有特定键的数据?

时间:2012-10-01 12:21:36

标签: python json

我已经解析了如下的json数据:

{
    "results": {
        "authors": [
            [
                {
                    "person": "Person1 Name",
                    "key": "director"
                }
            ],
            [
                {
                    "person": "Person2 Name",
                    "key": "author"
                },
                {
                    "person": "Person3 Name",
                    "key": "author"
                }               
            ]
        ]
    }
}

即。可以有几位导演和几位作者。我应该像字符串一样得到它:

directors = "Person1 Name"
authors = "Person2 Name, Person3 Name"

看起来我应该通过每个值并检查其key。但我怎么能用simplejson做呢?

3 个答案:

答案 0 :(得分:3)

要从json结构中提取数据,可以使用jsonpath模块。见http://goessner.net/articles/JsonPath/。我不是这个模块的作者。

您的代码看起来像这样:

directors = jsonPath(json, '$..authors[?(@.key=="director")]')
authors = jsonPath(json, '$..authors[?(@.key=="author")]')

您需要提取名称并将它们连接在一起,但我认为您会发现这很容易。

答案 1 :(得分:1)

以下代码适用于我:

authors = []
directors = []
for persons in movie_json.get('results').get('authors'):
    for person in person:
        if person.get('person'):
            if person.get('key')=='author':
                authors.append(person.get('person'))
            elif person.get('key')=='director':
                directors.append(person.get('person'))
authors = None if authors == [] else ', '.join(authors)
directors = None if directors == [] else ', '.join(directors)

答案 2 :(得分:0)

我认为你的json设计是错误的。 你应该像这样制作json:

foo =    {
        "results": {
            "directors": [            
                        "person": "Person1 Name",
                ],
            "authors":[                
                        "person": "Person2 Name",                 
                        "person": "Person3 Name",
                ]        
        }
    }

现在,如果有人要求董事

directors = ','.join(foo["directors"])

和作者

authors = ','.join(foo["authors"])

感谢