2016-05-14 24 views
1

これはPythonでJSONファイルを使用しようとする最初の試みですが、この問題に関して多くのことを読んだことがありますが、私はまだ非常に混乱しています。 jason.jsonという名前のファイルを1行ずつ読み込み、それをdataという名前のリストに保存してから、それを印刷します。しかし、私はいつも次のエラーを取得する:PythonでJSONファイルを開く

Traceback (most recent call last): 
    File "try.py", line 6, in <module> 
    data.append(json.loads(line)) 
    File "C:\Users\...\Python35\lib\json\__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "C:\Users\...\Python35\lib\json\__init__.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Users\...\Python35\lib\json\__init__.py", line 355, in raw_decode 
    obj, end = self.scan_once(s, idx) 
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 2) 

は、これは私のコードです:

import json 
data = [] 
with open('jason.json') as f: 
    for line in f: 
     data.append(json.loads(line)) 

print(data) 

そして、これはjason.jsonです:

{ 
    "E(2,3)" : "A common Afro-Cuban drum pattern", 
    "E(2,5)" : "A rhythm found in Greece", 
    "E(3,4)" : "It is the archetypal pattern of the Cumbia from Colombia", 
    "E(3,5)" : "Persian rhythm" 
} 

は、事前にありがとうございます!

+0

with open('jason.json') as f: data = list(json.load(f).items()) print(data) 

ような何かを行うことができます。個々の行は**有効なJSONではありません。 – jonrsharpe

+0

@Martijn Pietersの解決策は行く方法です。しかし、あなたがこの問題を抱えている理由は、ファイルを手作業で作成したことや、改行があるような場所からファイルをコピーしたことがあるためです。通常、.jsonファイルに改行がないため、唯一の行は有効なjsonになります。 'json.dump(my_data、my_file)'を使ってファイルにデータ構造を保存することができます。改行はなく、あなたのアプローチを使って読み込むこともできます。 – Akavall

+0

@Akavall:いいえ、JSONは簡単に改行できます。例えば、 'json.dump(my_data、my_file、indent = 4)'を使ってください。 JSONは実際には単一行形式として扱われることはありませんでした。 –

答えて

1

注:これは最も簡単なjson.load()機能を使用して行います。あなたはタプルのリストをしたいのであれば、あなたはあなたが一度でファイル全体をロードする必要があり

[('E(3,5)', 'Persian rhythm'), ('E(3,4)', 'It is the archetypal pattern of the Cumbia from Colombia'), ('E(2,3)', 'A common Afro-Cuban drum pattern'), ('E(2,5)', 'A rhythm found in Greece')] 
+0

本当に助けていただきありがとうございます! –

3

あなたはラインであなたのファイルの行を読んでいるが、あなたのファイルから1行が有効なJSON文書ではありません。

>>> import json 
>>> json.loads('{\n') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 355, in raw_decode 
    obj, end = self.scan_once(s, idx) 
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 2) 

デコード一度で全体ファイル。 jason.jsonに格納されたデータは、辞書ではなくリストであることを

with open('jason.json') as f: 
    data.append(json.load(f)) 
+1

データ= json.load(f)のデータはまだ存在していないと思います。 – PyNEwbie

+0

@PyNEwbie:質問では、 'data = []'は 'with'文の前に定義されています。私は 'with'ブロックに焦点を合わせました。 –

+0

私は彼がどんなjsonオブジェクトが彼がキーを追加すると思うように思われると思うと思うと思うのですが、値ペアは何のデータでなければなりません – PyNEwbie

関連する問題