2016-10-15 57 views
2

我正在逐行讀取JSON文件。少數行包含JSON對象,而其他行包含JSON數組。我正在使用json.loads(line)函數從每行中獲取JSON。字符串是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 ObjectJSON 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

您的代碼存在問題 - 如果行不包含full JSON對象 - 它很少會這樣做 - 它幾乎總是會失敗。

與Java不同,在Python中,JSON自然由列表和字典元素的層次混合表示。所以,如果你正在尋找你的JSON中的列表元素,你可以使用遞歸搜索。

如果您要檢查,如果你的文件是有效的JSON - 下面的代碼更簡單和更短的測試

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

編輯 它是JSON文件或JSON模式?

在後者,你可能只是檢查,如果你的對象是列表

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

正如我已經說過,有在Python

PS沒有這樣的事情「JSON對象」如果你讀文件一行一行,每行都是JSON對象 - 它不是JSON文件,它是每個字符串都包含JSON的文件。否則,你的測試將失敗已經是第一線,這將是多麼

{ 
+0

行包含完整的json對象。但很少有其他行包含JSON數組。我知道如何檢查有效性。如何檢查我已閱讀的對象是JSON對象還是JSON數組? –

相關問題