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 に答える