строка — это объект JSON или массив JSON в Python?

#python #json #python-3.x

#python #json #python-3.x

Вопрос:

Я читаю файл JSON построчно. Несколько строк содержат объекты JSON, в то время как другие содержат массив JSON. Я использую json.loads(line) функцию для получения 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.

Я буду благодарен вам, если кто-нибудь сможет мне помочь.

Комментарии:

1. Пожалуйста, опубликуйте свой текущий код

2. Вы можете проверить тип с помощью таблицы преобразования

3. @jamylak Я отредактировал вопрос с помощью кода.

4. Почему вы читаете это построчно? Это файл со многими JSON, разделенными символом новой строки?

5. @zvone да, некоторые строки имеют простой объект JSON, в то время как другие имеют массив JSON. Но эти объекты массива JSON также размещаются построчно

Ответ №1:

В 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)
 

Комментарии:

1. Моя проблема была решена с помощью isintance(). Большое спасибо

Ответ №2:

Проблема с вашим кодом — если строка не содержит полный объект 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 нет такого понятия, как «объект JSON»

PS Если вы читаете файл построчно, и каждая строка является объектом JSON — это не файл JSON, это файл, в котором каждая строка содержит JSON. В противном случае ваш тест завершится неудачей уже в первой строке, которая будет просто

 {
 

Комментарии:

1. Строка содержит полный объект json. Но несколько других строк содержат массив JSON. Я знаю, как проверить правильность. Как проверить, что прочитанный мной объект является объектом JSON или массивом JSON?