#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?