web-dev-qa-db-ja.com

ネストされたJSONオブジェクトを反復処理し、Python

私はPythonを使用しています。そして、JSONオブジェクトを反復処理し、ネストされた値を取得する必要があります。私のデータのスニペットは次のとおりです:

 "bills": [
{
  "url": "http:\/\/maplight.org\/us-congress\/bill\/110-hr-195\/233677",
  "jurisdiction": "us",
  "session": "110",
  "prefix": "H",
  "number": "195",
  "measure": "H.R. 195 (110\u003csup\u003eth\u003c\/sup\u003e)",
  "topic": "Seniors' Health Care Freedom Act of 2007",
  "last_update": "2011-08-29T20:47:44Z",
  "organizations": [
    {
      "organization_id": "22973",
      "name": "National Health Federation",
      "disposition": "support",
      "citation": "The National Health Federation (n.d.). \u003ca href=\"http:\/\/www.thenhf.com\/government_affairs_federal.html\"\u003e\u003ccite\u003e Federal Legislation on Consumer Health\u003c\/cite\u003e\u003c\/a\u003e. Retrieved August 6, 2008, from The National Health Federation.",
      "catcode": "J3000"
    },
    {
      "organization_id": "27059",
      "name": "A Christian Perspective on Health Issues",
      "disposition": "support",
      "citation": "A Christian Perspective on Health Issues (n.d.). \u003ca href=\"http:\/\/www.acpohi.ws\/page1.html\"\u003e\u003ccite\u003ePart E - Conclusion\u003c\/cite\u003e\u003c\/a\u003e. Retrieved August 6, 2008, from .",
      "catcode": "X7000"
    },
    {
      "organization_id": "27351",
      "name": "Natural Health Roundtable",
      "disposition": "support",
      "citation": "Natural Health Roundtable (n.d.). \u003ca href=\"http:\/\/naturalhealthroundtable.com\/reform_agenda\"\u003e\u003ccite\u003eNatural Health Roundtable SUPPORTS the following bills\u003c\/cite\u003e\u003c\/a\u003e. Retrieved August 6, 2008, from Natural Health Roundtable.",
      "catcode": "J3000"
    }
  ]
},

「bills」の各オブジェクトを通過し、「session」、「prefix」などを取得する必要があります。また、各「組織」を通過し、「name」、「disposition」などを取得する必要があります。次のコードがあります。 :

import csv
import json

path = 'E:/Thesis/thesis_get_data'

with open (path + "/" + 'maplightdata110congress.json',"r") as f:
data = json.load(f)
a = data['bills']
b = data['bills'][0]["prefix"]
c = data['bills'][0]["number"]

h = data['bills'][0]['organizations'][0]
e = data['bills'][0]['organizations'][0]['name']
f = data['bills'][0]['organizations'][0]['catcode']
g = data['bills'][0]['organizations'][0]['catcode']

for i in a:
    for index in e:
          print ('name')

そして、文字列 'name'を何度も返します。

提案?

8
Michael Perdue

私は別のフォーラムで解決策を見つけ、これが誰かのために再び現れた場合に備えて、ここの全員と共有したいと思いました。

import csv
import json

path = 'E:/Thesis/thesis_get_data'

with open (path + "/" + 'maplightdata110congress.json',"r") as f:
data = json.load(f)

for bill in data['bills']:
    for organization in bill['organizations']:
        print (organization.get('name'))`
9
Michael Perdue

これは役立つかもしれません。

def func1(data):
    for key,value in data.items():
        print (str(key)+'->'+str(value))
        if type(value) == type(dict()):
            func1(value)
        Elif type(value) == type(list()):
            for val in value:
                if type(val) == type(str()):
                    pass
                Elif type(val) == type(list()):
                    pass
                else:
                    func1(val)
func1(data)

JSONオブジェクトをディクショナリとして関数に渡すだけです。

これもpythonこれに役立つ可能性のあるライブラリです。ここで見つけることができます-> JsonJ

ピースブロ!!!

6
Joish