2

1 レベルよりも深い JSON オブジェクトをループする方法がわかりません。オブジェクトは次のとおりです。

{
  "data":[
    {
      "id":"251228454889939/insights/page_fan_adds_unique/day",
      "name":"page_fan_adds_unique",
      "period":"day",
      "values":[
        {
          "value":9,
          "end_time":"2012-05-29T07:00:00+0000"
        },
        {
          "value":5,
          "end_time":"2012-05-30T07:00:00+0000"
        }
      ],
      "title":"Daily New Likes",
      "description":"Daily The number of new people who have liked your Page (Unique Users)"
    },
    {
      "id":"251228454889939/insights/page_fan_adds/day",
      "name":"page_fan_adds",
      "period":"day",
      "values":[
        {
          "value":9,
          "end_time":"2012-05-29T07:00:00+0000"
        },
        {
          "value":5,
          "end_time":"2012-05-30T07:00:00+0000"
        }
      ],
      "title":"Daily New Likes",
      "description":"Daily The number of new people who have liked your Page (Total Count)"
    }
  ]
}

コード:

def parseJsonData(data):
    output_json = json.loads(data)
    for i in output_json:
        print i
        for k in output_json[i]:
            print k

次のようなオブジェクトにアクセスできないのはoutput_json[data][id]なぜですか? これを試すとエラーが発生します:

文字列インデックスは整数でなければなりません

4

2 に答える 2

5

「データ」キーは実際にはオブジェクトのリストであるため、「id」フィールドでアイテムに直接アクセスすることはできません。次のようなリスト インデックスで各項目にアクセスする必要があります。
output_json["data"][0]["id"]

ここで、「id」フィールドをキーとして「data」のメンバーにインデックスを付けたい場合は、データを再フォーマットできます。

# make "data" a dict {id: item, }, instead of list [item1, item2, ...]
output_json['data'] = dict((item['id'], item) for item in json_data['data'])

print output_json['data']
# {'251228454889939/insights/page_fan_adds_unique/day': ...

print output_json['data']['251228454889939/insights/page_fan_adds_unique/day']
# {'description': 'Daily The number of new p ...

# ways to loop over "data"
for id_, item in output_json['data'].iteritems():
    print id_, item

for item in output_json['data'].itervalues():
    print item

それ以外の場合は、インデックスとオブジェクトの間に実際の相関関係がないため、「データ」をループするだけです。

for item in output_json["data"]:
    print item['id']

# 251228454889939/insights/page_fan_adds_unique/day
# 251228454889939/insights/page_fan_adds/day
于 2012-06-01T19:30:14.447 に答える
2

貼り付けたものは有効な JSON ではありません。「データ」の後に一致しない [ があります。

これに基づいて、おそらくデータはあなたが思っているものとは違うと思います。output_json[data] の値がリストの場合、 にアクセスできませんoutput_json[data][id]output_json[data][0][id]代わりに、 [0] がリストの最初の項目にアクセスするようなことをする必要があります。

于 2012-06-01T19:04:44.110 に答える