Проверьте, является ли строка JSON в python?
У меня есть строка в Python, я хочу знать, действительно ли она JSON.
json.loads(mystring)
вызовет ошибку, если строка не JSON, но я не хочу перехватывать исключение.
Мне нужно что-то подобное, но оно не работает:
if type(mysrting) == dict:
myStrAfterLoading = json.loads(mystring)
else:
print "invalid json passed"
Мне нужно поймать этот ValueError, чтобы увидеть, является ли моя строка JSON?
Ответы
Ответ 1
Правильный ответ: перестать НЕ хотеть поймать ValueError
.
Пример Python script возвращает логическое значение, если строка действительна json:
import json
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError, e:
return False
return True
print is_json('{}') # prints True
print is_json('{asdf}') # prints False
print is_json('{"age":100}') # prints True
print is_json('{'age':100 }') # prints False
print is_json('{"age":100 }') # prints True
Ответ 2
Чтобы проверить, что строка потребует синтаксического анализа, так что если вы проверили, то преобразовать это буквально займет в два раза больше.
Лучше всего поймать исключение.
Интересно, что вы все равно можете использовать выражение стиля if-else:
try:
json_object = json.loads(json_string)
except ValueError, e:
pass # invalid json
else:
pass # valid json
Ответ 3
Есть ли причина, по которой вы не хотите поймать исключение?
Имейте в виду, что тестирование и улавливание исключения может быть невероятно быстрым в Python и часто является способом Pythonic делать вещи, а не тестировать тип (в основном, доверять утиному типу и реагировать соответственно).
Чтобы немного успокоиться, взгляните сюда:
Python, если vs try-except
Если вас все еще беспокоит читаемость, добавьте комментарий к коду, чтобы объяснить, почему вы используете try/except;)
Я боролся с этим подходом в прошлом, исходя из фона Java, но это действительно самый простой способ сделать это в Python... и простой лучше, чем сложный.
Ответ 4
почему синтаксический анализ, когда вы можете использовать типы следующим образом:
def is_json(myjson):
return type(myjson) == type({})
def is_json_arr(myjson):
return type(myjson) == type([{}])