2016-10-15 13 views
2

JSONファイルを1行ずつ読み込んでいます。 JSONオブジェクトを含む行はほとんどなく、JSON配列を含む行はほとんどありません。私はjson.loads(line)関数を使用して各行からJSONを取得しています。stringはPythonのJSONオブジェクトまたはJSON配列ですか?

def read_json_file(file_name): 
    json_file = [] 
    with open(file_name) as f: 
     for line in f: 
      json_file.append((line)) 

    json_array = [] 
    for obj in json_file: 
     try: 
      json_array.append(json.loads(obj)) 
     except ValueError: 
      print("data was not valid JSON") 

    return json_array 

私が読んでいるオブジェクトがJSONオブジェクトまたはJSON配列であることがわかる方法はありますか?私はすべての結果をjson_arrayに保存したい。

誰かが私を助けることができれば、私はあなたに感謝します。

+0

あなたがチェックすることができ、あなたの現在のコード – jamylak

+1

を投稿してください[変換テーブル](https://docs.python.org/2/library/json.html#json-to-py-table)を使用しているタイプ – UnholySheep

+0

@jamylak私はコードで質問を編集しました。 –

答えて

3

Pythonでは、JSONオブジェクトはdictに変換され、JSONリストがlistデータ型に変換されるだろう、すでに最初の行に失敗します。

あなたはJSON有効である必要がありライン内容を確認したいのであれば、JSON ObjectまたはJSON Arrayで、このコードの意志はあなたを支援します -

import json 

# assume that, each line is valid json data 
obj = json.loads(line) 

# if returns true, then JSON Array 
isinstance(obj, list) 

# if returns true, then JSON Object. 
isinstance(obj, dict) 
+0

isintance()を使用して私の問題を解決しました。ありがとうございます –

0

コードに問題があります - 行に含まれていない場合完全 JSONオブジェクト - ほとんど例外はありません。

Javaとは異なり、PythonではJSONは自然とリスト要素と辞書要素の階層的な混合によって表されます。したがって、JSONのリスト要素を探している場合は、再帰的検索を使用できます。

あなたのファイルが有効なJSONであるかどうかを確認したい場合 - 以下のコードに簡単かつ短いテストです

try: 
    with open(file_name) as f: 
     json_obj = json.load(f) 
    except: 
     print "Not valid JSON" 

EDIT が、それはJSONファイルまたはJSONスキーマですか?あなたがファイルを読み込む場合は、あなたのオブジェクトは、私はすでに述べたように、リスト

obj = json.loads(line) 
isintance(obj, list) 

であれば、後者で

は、あなただけチェックして、Pythonの

PSで「JSONオブジェクト」のようなものがありません各行はJSONオブジェクトです。これはJSONファイルではなく、各文字列にJSONが含まれているファイルです。そうでなければ、あなたのテストはちょうど

{ 
+0

行には完全なjsonオブジェクトが含まれています。しかし、他の行にはJSON配列が含まれています。私は妥当性をチェックする方法を知っています。私が読んでいるオブジェクトをチェックする方法は、JSONオブジェクトまたはJSON配列ですか? –

関連する問題