1

我已经解析了如下的 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呢?

4

3 回答 3

3

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

您的代码将如下所示:

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

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

于 2012-10-01T12:29:21.863 回答
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)
于 2012-10-02T18:31:19.177 回答
0

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

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

现在如果有人要求董事做

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

和作者

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

谢谢

于 2012-10-01T12:32:16.863 回答