2011-07-01 34 views
0

私は次の形式のJSONがありますPythonでJSONから余分な角括弧を削除するにはどうすればよいですか?

{"blah": 
[ 
    [ 
    {"first": 
    {"something":"that","something":"else","another":"thing","key":"value"}...[etc.] 
    } 
    ] 
] 
} 

私はPythonで解析しようとしています。私は、JSON(またはのsimplejson、あなたが使っているのPythonのバージョンに応じて)インポートし、すべてがかなりよく、私はこのブロックに到達するまでになりました:

エラーがスローされます
for result in page['blah']: 
    that = result['first'] 
    a_list.append(that) 

「はTypeError:リストインデックスがなければなりません整数ではなく、str "

このエラーは、JSONをリストのように見せる余分な角括弧のペアが原因であると確信しています。

私の質問ですが、それを削除して有効なJSONを辞書として解析するにはどうすればよいですか?

他の回避策を歓迎します。もっと情報を提供する必要がある場合は、私に教えてください。ありがとう!

は(不足している中括弧を追加しましたし、紛らわしい用語のカップルを変更 - 私は混乱して申し訳ありませんオンザフライでの一般的な用語、思い付くしようとしていた。)

+1

中かっこが欠けているようです。 –

+0

Zhehao Maoが言ったように、あなたはコメントを見逃しているようだし、あなたの問題がこれか他の何かから来るのかどうかを知ることは難しいので、完全なコードを投稿できますか? – seb

答えて

1

常に1つの「エクストラ」がある場合配列ブラケットのセット:

+0

Felixの答えは、コードサンプルとあまり一致しません。一番外側の中括弧内にあるオブジェクト全体ではなく、JSONオブジェクトの「内部」値が本当に必要な場合は、そのようなことをする必要があります。 –

0

JSON文字列から角括弧を削除する必要はありません。私は権利を取り除くことを確実にすることは努力に値するものではないと思う。あなたが望む値にアクセスする正しい方法を理解してください。

「余分な」括弧が唯一の問題ではありません。 thisは、オブジェクトのプロパティで、値はfirstです。だから、thisにアクセスするには、これは常に左アウトJSONデータに依存しない動作しますかどうか

that = result[0]['first']['this'] 

を書く必要があるだろう。

+0

ああ、申し訳ありません、私は飛行中に一般的な言葉を思いついていました。あなたは絶対に正しいです、そして、私は実際のコードで "this"も "list"も使用していないことを確信しています。 – Philoktetes

0

まず、あなたの誤りは、Pythonデータ型とJSON出力の誤った使用に関連しています。

第2に、変数を作成するときにlistと他のすべてのPython予約語を使用しないでください。

最後に、あなたは、単にのthis内側のキーをすべての結果を取得したい場合、あなたは以下のコードを使用して試すことができます:

data = {"blah": 
[ 
    [ 
    {"first": 
    {"this":"that", 
    "something":"else","another":"thing","key":"value"}} 
    ] 
] 
} 
outres = [] 
for k,v in data.items():#iterate over top dictionary('blah',....) 
    for sv in v: # iterate through first list 
     for tv in sv: # iterate through second list 
      for fk,fv in tv.iteritems(): # iterate through each dicionary from second list 
       if 'this' in fv: 
        outres.append(fv['this']) 
print outres 

は私のサンプルは、あなたのデータサンプルに基づいていることに注意してください - したがって、データ構造に追加のレベルがある場合、または他のルールを適用する必要がある場合は、コードを変更する必要があります。

関連する問題