Дополнительно
Как проверить, является ли строка допустимой строкой JSON в JavaScript без использования Try/Catch
Что-то вроде:
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
Решение не должно содержать try/catch. Некоторые из нас включают "break on all errors", и им не нравится, что отладчик ломается на недействительных JSON-строках.
489
19
Используйте парсер JSON, например
JSON.parse
:Я знаю, что я'м 3-летним опозданием к этому вопросу, но я чувствовал, что прояснил.
В то время как Гумбо'ы решение работает отлично, это не'т обрабатывать несколько случаев, когда исключение для
формат JSON.разобрать({то, что это'т в JSON})
Я тоже предпочитаю возвращать разобранный JSON и в то же время, так что вызывающий код не'т придется позвонить в JSON.разобрать(jsonString) во второй раз.
Это, кажется, работает хорошо для моих потребностей:
Комментарий первой. Вопрос был о том, что не используя
попробовать/поймать.<БР/> Если вы не возражаете, чтобы использовать его, читайте ответ ниже. Здесь мы просто проверяем на
JSON` как строку, используя регулярное выражение, и оно будет работать в большинстве случаев, не во всех случаях.Посмотрите вокруг линии 450 в https://github.com/douglascrockford/JSON-js/blob/master/json2.js
Есть регулярное выражение, которое проверяет на допустимый JSON, что-то вроде:
Редактировать: новая версия json2.js делает более сложный парсинг, чем выше, но все же на основе регулярного выражения заменить ( от комментарий @Mrchief )
Использование:
isJSON({})
будетложь
,isJSON('{}')
будет "истина".Чтобы проверить, если что-то будет
выбора
илиобъект
(разбирается в JSON):Использование:
Исао({})
будетистина
,Исао('{}')
будет "ложь".Я использовал очень простой метод, чтобы проверить строку, как это'ы действительный JSON или нет.
Результат с допустимым JSON-строку:
Результат с простой строкой;
Результат с объектом:
Результат с нулем ввода:
Последний возвращает false, потому что тип значения null переменных объекта.
Это работает каждый раз. :)
Вот мой рабочий код:
В prototypeJS у нас есть метод isJSON. Вы можете попробовать его. Даже json может помочь.
Из строки рамках прототипа.isJSON` определение здесь
так это версия, которая может быть использована передача объекта String
в
в
Может быть, это будет полезно:
выход:
ИЕ7: струны,объекта,строки,строки
Хром: объект,объекта,строки,строки
Я использовал jQuery для разбора формата JSON строки и я trycatch заявление для обработки исключений, но исключений для ООН-распознаваемо струн замедлился мой код, так что я использовал простое регулярное выражение для проверки строки, если это возможно в JSON строку и не без перьев, проверяя его'с синтаксисом, то я использовал обычный способ разбора строки с помощью jQuery :
Я думаю, я знаю, почему вы хотите, чтобы избежать этого. Но, может быть, попробовать & улов !== попробовать & поймать. ;О) это пришло мне в голову:
Так что вы можете также грязные клип к JSON-объект, как:
Как это encapsuled, как это возможно, он не может нарушить по ошибке.
Здесь тоже машинопись версия:
надеюсь, что это работает для вас тоже
Я делаю вывод из вступительного комментария, что речь разграничить, является ли ответ является HTML или JSON. В этом случае, когда вы действительно получать в формате JSON, вы, вероятно, следует Разбор и обработку в любом случае недопустимый формат JSON в какой-то момент в коде. Кроме всего, я полагаю, вы хотели бы быть проинформированы в вашем браузере должен быть в формате JSON, но недопустимый формат JSON получил (а пользователи по доверенности на какое-то осмысленное сообщение об ошибке)!
Делаю полный regex для JSON является поэтому ненужным (как это было бы - по моему опыту - в большинстве случаев). Вы, вероятно, будет лучше использовать что-то вроде ниже:
это должно избавить вас от необходимости обработки исключений действует не в JSON код и заботиться о Дафф в формате JSON в то же время.
в
документ.пишут (на"invalide в JSON и") }
в
Вы можете использовать функцию javascript eval(), чтобы проверить, действителен ли он'.
например.
В качестве альтернативы можно использовать функцию
JSON.parse
из json.org:Надеюсь, это поможет.
ПРЕДУПРЕЖДЕНИЕ:
eval()
является опасным, если кто-то добавит вредоносный JS-код, так как он выполнит его. Убедитесь, что JSON-строка достоверна, т.е. вы получили ее из надежного источника.Редактирование Для моего первого решения рекомендуется сделать следующее.
Чтобы гарантировать json-ness. Если
jsonString
не является чистым JSON, eval будет выдавать исключение.Да, вы можете определенно использовать попробовать поймать, чтобы проверить, является ли его или не допустимый JSON
Проверено на Firfox Quantom 60.0.1
функция используется внутри функции, чтобы получить JSON-файла протестирована и использовать этот вывод для проверки строки. слышит пример.
Если есть ошибки, возвращает false.
Если ошибок нет, возвращать JSON
Функция
IsJsonString(ул.)
, то есть черезформат JSON.разобрать(ул.)
, Не't работа в моем случае. Я пытался проверить выходной формат JSON GraphiQL он всегда возвращает false. Мне повезло, isJSON работает лучше:`` ВАР тест = ложь;
$('тело').на('DOMSubtreeModified', '.resultWrap', функция() {
если (!тест) { ВАР resultWrap = на "{" в + $('#graphiql .resultWrap').текст().Сплит (на"{" - а).поп(); если isJSON(resultWrap) {тест = !тест;} консоль.журнал(resultWrap); консоль.журнал(resultWrap.isJSON()); }
}); `` Пример вывода:
`` Три.WebGLRenderer 79 рисовать.ДШ:170 {ХХХХХХХХХХ рисовать.ДШ:170 ложные рисовать.ДШ:170 {ХХХХХХХХХХ рисовать.ДШ:170 ложные рисовать.ДШ:170 {ХХХХХХХХХХ рисовать.ДШ:170 ложные рисовать.ДШ:170 {ХХХХХХХХХХ рисовать.ДШ:170 ложные рисовать.ДШ:170 { рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"Я ПИ&;: 3.141592653589793, рисовать.ДШ:170 ложные рисовать.ДШ:170 { "Ну все, мне пи&;: 3.141592653589793, на"Время": 1570751209006, рисовать.ДШ:170 ложные рисовать.ДШ:170 { "Ну все, мне пи&;: 3.141592653589793, на"Время": 1570751209006, на"галочки" по: 156, рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает" и: 1.56, рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает" и: 1.56, на"кадров" и: 41.666666666666664, рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает и": 1.56, на"кадров" и: 41.666666666666664, на"ширина" и: 396.984, рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает и": 1.56, на"кадров" и: 41.666666666666664, на"ширина" и: 396.984, на"высоте", которая: 327 рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает и": 1.56, на"кадров" и: 41.666666666666664, на"ширина" и: 396.984, на"высоте", которая: 327} рисовать.ДШ:170 ложные рисовать.ДШ:170 { на"пи" и: 3.141592653589793, на"Время": 1570751209006, на"галочки" по -: 156, на"tickr поддерживает и": 1.56, на"кадров" и: 41.666666666666664, на"ширина" и: 396.984, на"высоте", которая: 327} рисовать.ДШ:170 правда
``