Подтвердить что ты не робот

Проверьте, является ли строка JSON в python?

У меня есть строка в Python, я хочу знать, действительно ли она JSON.

json.loads(mystring) вызовет ошибку, если строка не JSON, но я не хочу перехватывать исключение.

Мне нужно что-то подобное, но оно не работает:

if type(mysrting) == dict:
    myStrAfterLoading = json.loads(mystring)
else:
    print "invalid json passed"

Мне нужно поймать этот ValueError, чтобы увидеть, является ли моя строка JSON?

4b9b3361

Ответ 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([{}])