2016-06-24 11 views
0

RESTful APIから受信しているJSONを解析しようとしていますが、空のプロパティ名があるように見えるためPythonでデータにアクセスできません。Pythonで空のJSONプロパティ/要素を解析する方法

JSONのサンプルが返さ:

{ 
    "extractorData" : { 
"url" : "RetreivedDataURL", 
"resourceId" : "e38e1a7dd8f23dffbc77baf2d14ee500", 
"data" : [ { 
    "group" : [ { 
    "CaseNumber" : [ { 
     "text" : "PO-1994-1350", 
     "href" : "http://www.referenceURL.net" 
    } ], 
    "DateFiled" : [ { 
     "text" : "03/11/1994" 
    } ], 
    "CaseDescription" : [ { 
     "text" : "Mary v. JONES" 
    } ], 
    "FoundParty" : [ { 
     "text" : "Lastname, MARY BETH (Plaintiff)" 
    } ] 
    }, { 
    "CaseNumber" : [ { 
     "text" : "NP-1998-2194", 
     "href" : "http://www.referenceURL.net" 
    }, { 
     "text" : "FD-1998-2310", 
     "href" : "http://www.referenceURL.net" 
    } ], 
    "DateFiled" : [ { 
     "text" : "08/13/1993" 
    }, { 
     "text" : "06/02/1998" 
    } ], 
    "CaseDescription" : [ { 
     "text" : "IN RE: NOTARY PUBLIC VS REDACTED" 
    }, { 
     "text" : "REDACTED" 
    } ], 
    "FoundParty" : [ { 
     "text" : "Lastname, MARY H (Plaintiff)" 
    }, { 
     "text" : "Lastname, MARY BETH (Defendant)" 
    } ] 
    } ] 
} ] 

そして、私は

import requests 
import json 

FirstName = raw_input("Please Enter First name: ") 
LastName = raw_input("Please Enter Last Name: ") 


with requests.Session() as c: 
url = ('https://www.requestURL.net/?name={}&lastname={}').format(LastName, FirstName) 
page = c.get(url) 
data = page.content 

theJSON = json.loads(data) 

def myprint(d): 
stack = d.items() 
while stack: 
    k, v = stack.pop() 
    if isinstance(v, dict): 
     stack.extend(v.iteritems()) 
    else: 
     print("%s: %s" % (k, v)) 

print myprint(theJSON["extractorData"]["data"]["group"]) 

を使用しようとしていますPythonのコードを、私はエラーを取得:

TypeError: list indices must be integers, not str 

私はに新しいですPythonの解析と単純なPythonより一般的なので、私の無知を許します。しかし、それは空のプロパティであることを何私をリードし、私は視覚的にオンラインJSONを表示するツールを使用する場合、私はそうのように、空のブラケットを得ることをされたと信じてします

printscreen http://image.prntscr.com/image/6f8a8e4a1b8742d081bff024207d6426.png

テキストにこのデータを解析するすべてのヘルプ大きな助けになるだろう。

EDIT:

for d in group: 
print group[0]['CaseNumber'][0]["text"] 

しかし、今どのように私は、「CaseNumber」と表示されたすべてのノードをリストするグループのプロパティに記載されているすべての辞書を反復処理することができます。今、私はこのコードで特定のノードを参照することができていますなぜなら、それらのすべてに存在しなければならないからです。例えば

print group[0]['CaseNumber'][0]["text"] 

その後、

for d in group: 
print group[1]['CaseNumber'][0]["text"] 

などなど。おそらく終わりに達するまで何らかの整数をインクリメントするでしょうか?私はあまりよく分からない。

答えて

1

jsonを注意深く見ると、アクセスしているdataのキーが実際にリストになりますが、data['group']はそれが辞書であるかのようにアクセスしようとしています。これがTypeErrorを呼び起こしています。あなたのJSONを縮小化する

それはあなたがグループにアクセスしたいのであれば、あなたは最初のリストであるdataを取得する必要があり、この

{ 
    "extractorData": { 
     "url": "string", 
     "resourceId": "string", 
     "data": [{ 
      "group": [] 
     }] 
    } 
} 

のようなものです。

data = sample['extractorData']['data'] 

は、あなたは dataを反復し、それ

for d in data: 
    group = d['group'] 

私はこれがあなたのために物事ビットを明確に願っています内groupを得ることができます。

+0

これは少し役に立ちます。私は "グループ"の内容を習得することができました。私はそうでなければエラーを投げたので、2番目のコードブロックで "data"という単語の後ろに引用符を付けることを意味していたと思います。私はまだforループが何をしているのか混乱している。 "group"はPython辞書として返されますが(または少なくとも現れると思われますが)、個々のプロパティへのアクセスにはまだ問題があります。例: {u'CaseDescription ':[{{u'text':u'NAME '}] 私の理解は、テキストを参照するためのキー名になるはずですが、u'CaseDescription'というテキストが表示されます。作業。 –

+0

@HunterBeach、 'data'は実際には辞書のリストです –

+0

@HunterBeach私の言葉は少し不適切です、ヨルダンの編集はそれをもう少し明確にします。まだ混乱している場合は、あなたの目標を達成しようとしているコードで質問を更新できますか? –

関連する問題