2

URL から取得した次の JSON があります。

[{
  "id": 1,
  "version": 23,
  "external_id": "2312",
  "url": "https://example.com/432",
  "type": "typeA",
  "date": "2",
  "notes": "notes",
  "title": "title",
  "abstract": "dsadasdas",
  "details": "something",
  "accuracy": 0,
  "reliability": 0,
  "severity": 12,
  "thing": "32132",
  "other": [
    "aaaaaaaaaaaaaaaaaa",
    "bbbbbbbbbbbbbb",
    "cccccccccccccccc",
    "dddddddddddddd",
    "eeeeeeeeee"
  ],
  "nana": 8
},
{
  "id": 2,
  "version": 23,
  "external_id": "2312",
  "url": "https://example.com/432",
  "type": "typeA",
  "date": "2",
  "notes": "notes",
  "title": "title",
  "abstract": "dsadasdas",
  "details": "something",
  "accuracy": 0,
  "reliability": 0,
  "severity": 12,
  "thing": "32132",
  "other": [
    "aaaaaaaaaaaaaaaaaa",
    "bbbbbbbbbbbbbb",
    "cccccccccccccccc",
    "dddddddddddddd",
    "eeeeeeeeee"
  ],
  "nana": 8
}]

私のコード:

import json
import urllib2

data = json.load(urllib2.urlopen('http://someurl/path/to/json'))
print data

たとえば、「id」が2に等しいオブジェクトの「抽象」部分にアクセスする方法を知りたいです。「id」の部分は一意であるため、id を使用して検索のインデックスを作成できます。

ありがとう!

4

3 に答える 3

3

これを行う1つの方法を次に示します。ジェネレーター式を介してジェネレーターを作成し、nextそのジェネレーターを 1 回反復して呼び出し、目的のオブジェクトを取得できます。

item = next((item for item in data if item['id'] == 2), None)
if item:
    print item['abstract']

Python: dict 内の何かに基づいてリストから dict を取得するも参照してください。

EDIT :特定のキー値 (たとえば、) を持つリストのすべての要素にアクセスしたい場合は、次id == 2の 2 つのいずれかを行うことができます。(他の回答に示されているように)理解を介してリストを作成するか、私のソリューションを変更することができます:

my_gen = (item for item in data if item['id'] == 2)
for item in my_gen:
    print item

ループ内でitem、指定された条件 (ここではid == 2) を満たすリスト内のアイテムを反復処理します。

于 2013-10-10T19:47:24.870 に答える
2

リスト内包表記を使用して、次をフィルタリングできます。

import json

j = """[{"id":1,"version":23,"external_id":"2312","url":"https://example.com/432","type":"typeA","date":"2","notes":"notes","title":"title","abstract":"dsadasdas","details":"something","accuracy":0,"reliability":0,"severity":12,"thing":"32132","other":["aaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbb","cccccccccccccccc","dddddddddddddd","eeeeeeeeee"],"nana":8},{"id":2,"version":23,"external_id":"2312","url":"https://example.com/432","type":"typeA","date":"2","notes":"notes","title":"title","abstract":"dsadasdas","details":"something","accuracy":0,"reliability":0,"severity":12,"thing":"32132","other":["aaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbb","cccccccccccccccc","dddddddddddddd","eeeeeeeeee"],"nana":8}]"""

dicto = json.loads(j)

results = [x for x in dicto if "id" in x and x["id"]==2]

そして、次のように「抽象」値を出力できます。

for result in results:
    if "abstract" in result:
        print result["abstract"]
于 2013-10-10T19:54:21.673 に答える
0
import urllib2
import json
data = json.load(urllib2.urlopen('http://someurl/path/to/json'))
your_id = raw_input('enter the id')
for each in data:
    if each['id'] == your_id:
        print each['abstract']

上記のコードでは、データはリストであり、それぞれが dict オブジェクトに簡単にアクセスできる dict です。

于 2013-10-15T14:36:44.063 に答える