Что-то вроде:
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
Решение не должно содержать try / catch. Некоторые из нас включают «разбить все ошибки», и им не нравится, когда отладчик ломает эти недопустимые строки JSON.
javascript
json
Чи Чан
источник
источник
try
?Ответы:
Сначала комментарий. Вопрос был о неиспользовании
try/catch
.Если вы не против его использовать, прочитайте ответ ниже. Здесь мы просто проверяем
JSON
строку с помощью регулярного выражения, и она будет работать в большинстве случаев, а не во всех.Посмотрите вокруг линии 450 в https://github.com/douglascrockford/JSON-js/blob/master/json2.js
Существует регулярное выражение, которое проверяет правильность JSON, что-то вроде:
РЕДАКТИРОВАТЬ : новая версия json2.js делает более сложный синтаксический анализ, чем выше, но все еще основанный на замене регулярного выражения (из комментария @Mrchief )
источник
Используйте синтаксический анализатор JSON, например
JSON.parse
:источник
JSON.parse("false")
оценивается как ложное .Я знаю, что я опоздал на этот вопрос на 3 года, но я чувствовал, что должен вмешаться.
Хотя решение Gumbo прекрасно работает, оно не обрабатывает несколько случаев, когда не возникает исключение для
JSON.parse({something that isn't JSON})
Я также предпочитаю возвращать проанализированный JSON одновременно, чтобы вызывающий код не вызывал
JSON.parse(jsonString)
второй раз.Кажется, это хорошо работает для моих нужд:
источник
o && o !== null
это лишнее.undefined
, а неfalse
потому , чтоfalse
она является допустимой строкой json, и нет способа провести различие междуtryParseJSON("false")
иtryParseJSON("garbage")
Использование:
isJSON({})
будетfalse
,isJSON('{}')
будетtrue
.Чтобы проверить, является ли что-то
Array
илиObject
( проанализировал JSON):Использование:
isAO({})
будетtrue
,isAO('{}')
будетfalse
.источник
null
проходит эту проверку.return !!(JSON.parse(str) && str);
должен блокировать нулевые значения. Я обновлю ответ с этим кодом.parse()
тест, вызывая WTF.Вот мой рабочий код:
источник
typeof str === 'string'
Я использовал очень простой метод, чтобы проверить строку, является ли она действительным JSON или нет.
Результат с правильной строкой JSON:
Результат с простой строкой;
Результат с объектом:
Результат с нулевым вводом:
Последний возвращает false, потому что типом нулевых переменных является объект.
Это работает каждый раз. :)
источник
null
вводом вернет false. Но «ложный» вход является допустимой строкой JSON. Это будет проанализированоboolean (false)
. Теперь я изменяю код, чтобы быть более точным.В prototypeJS у нас есть метод isJSON . Вы можете попробовать это. Даже JSON может помочь.
источник
"{ foo: 42 }".isJSON()
? Еслиfalse
, как я предполагаю (результат должен следовать за функцией документа), тогда возникает хороший вопрос: почему он ложный?{ foo: 42 }
Кажется, совершенно правильно JSON.Из
String.isJSON
определения каркаса прототипа здесьтак что это версия, которую можно использовать, передавая строковый объект
источник
Я использовал JQuery для анализа строк JSON и использовал оператор trycatch для обработки исключений, но создание исключений для непарсируемых строк замедлило мой код, поэтому я использовал простой Regex, чтобы проверить строку, если это возможная строка JSON или нет, не сходя с ума. проверив его синтаксис, затем я использовал обычный способ, проанализировав строку с помощью JQuery:
источник
Может быть, это будет полезно:
вывод:
IE7: строка , объект, строка, строка
ХРОМ: объект, объект, строка, строка
источник
Я думаю, я знаю, почему вы хотите избежать этого. Но, возможно, попробуй и поймай! == попробуй и поймай. о) Это пришло мне в голову:
Таким образом, вы можете также грязно обрезать объект JSON, например:
Поскольку это как можно больше заключено в капсулу, оно может не сломаться при ошибке.
источник
Вот версия для машинописи тоже:
источник
источник
Из вступительного комментария я делаю вывод, что вариант использования определяет, является ли ответ HTML или JSON. В этом случае, когда вы делаете получить JSON, вы , вероятно , должен быть разбор его и обработки недействительных JSON в какой - то момент в вашем коде в любом случае. Помимо всего прочего, я полагаю, что вы хотели бы, чтобы ваш браузер информировал вас о том, следует ли ожидать JSON, но получен неверный JSON (как и пользователи по доверенности с каким-либо значимым сообщением об ошибке)!
Поэтому выполнять полное регулярное выражение для JSON не нужно (как было бы - по моему опыту - для большинства случаев использования). Возможно, вам лучше использовать что-то вроде ниже:
это избавит вас от необходимости обрабатывать исключительные коды, отличные от JSON, и одновременно заботиться о duff json.
источник
надеюсь, что это работает и для вас
источник
Если есть ошибки, верните false.
Если ошибок нет, верните данные json
источник
Вы можете использовать функцию javascript eval (), чтобы убедиться, что она действительна.
например
Кроме того, вы можете использовать
JSON.parse
функцию из json.org :Надеюсь это поможет.
ВНИМАНИЕ :
eval()
это опасно , если кто - то добавляет вредоносный код JS, так как он будет выполнять. Убедитесь, что строка JSON заслуживает доверия , т.е. вы получили ее из надежного источника.Редактировать Для моего первого решения рекомендуется сделать это.
Чтобы гарантировать json-несс. Если
jsonString
не чистый JSON, eval выдаст исключение.источник
О, вы определенно можете использовать try catch, чтобы проверить, является ли это действительным JSON
Проверено на Firfox Quantom 60.0.1
используйте функцию внутри функции, чтобы протестировать JSON, и используйте этот вывод для проверки строки. слышит пример.
источник
Функция
IsJsonString(str)
, которая используетсяJSON.parse(str)
, не работает в моем случае.Я пытался проверить вывод json из GraphiQL, он всегда возвращал false. К счастью, isJSON работает лучше:
Пример вывода:
источник
Для людей, которым нравится соглашение .Net о функциях try, которые возвращают логическое значение и обрабатывают параметр byref, содержащий результат. Если вам не нужен параметр out, вы можете его пропустить и просто использовать возвращаемое значение.
StringTests.js
StringUtils.js
ObjectUtils.js
источник
Очень простой однострочный код (но хакерский подход)
источник