2016-12-02 14 views
0

私は、JSON要素のシーケンス(必ずしもリスト/タプルなどではない)を含む入力ファイルを持っています。PythonでJSONデータを読む

これはサンプルデータです:

{ 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"46.8", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.6", 
        "status":"1" 
       } 
      ], 
      "date":"Tue, 08 Nov 2016 00:00:00 -0600" }, { 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"47.0", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.8", 
        "status":"1" 
       } 
      ], 
      "date":"Mon, 07 Nov 2016 00:00:00 -0600" } 

私はJSONの最初のブロックを読み込むが、複数のブロックを読み込むときに出てERRSできるJSONライブラリを使用しようとしています。

Pythonで複数のJSON要素を読み取る正しい方法は何ですか?

ありがとうございます!

+0

これらをJSONオブジェクトの配列として作成しますか? – bharadhwaj

+0

ファイル全体をJsonオブジェクトの配列に変換する方法はありますか?どんなポインタも役に立つでしょう – Abhi

答えて

0

ジェネレータ関数を作成し、Pythonでjsonがどのように実装されているかを利用することをお勧めします。ここに私の作業の例では、ジェネレータ関数である:

import json 
from splitstream import splitfile 

def generate_json(file_name): 
    for jsonstr in splitfile(open(file_name), format="json"): 
     yield json.loads(jsonstr) 

for item in generate_json('data.json'): 
    print item 

しかし、あなたは(ピップ経由)splitstreamをインストールする必要があり、あなたのコードジェネレータ関数generate_jsonが含まれる場合があります。この関数は、完了するたびにjsonオブジェクトを生成(返す)します。

+0

関数では、jsonstrがバイトとして返されます。 json.loadsはバイトを処理できません: "トレースバック(最新の最後の呼び出し): ファイル" read_polls.py "、行11、 generate_json( 'testData.json')のアイテム: ファイル "read_polls.py"、9行目、generate_json json.loads(jsonstr) ファイル "/Users/ayada/anaconda/lib/python3.5/json/__init__.py"、行312、ロード s .__ class __.__ name__)) TypeError:JSONオブジェクトは、 'bytes'ではなくstrでなければなりません。 " – Abhi

+0

あなたの関数内のjsonstrの型は何ですか?私はPython 3.5 – Abhi

+0

str(jsonstr、 'utf-8')、cnvertedバイトをStringに使用しています。このソリューションはきちんと機能しました。ありがとう!! – Abhi