JSON.parse - Как обрабатывать заглавные логические значения? - PullRequest
0 голосов
/ 10 марта 2019

Я работаю над приложением Node.js, которое должно обрабатывать строки JSON и работать с объектами.

В основном все хорошо, и JSON.parse(myString) - это все, что мне нужно.

Приложение также получает данные от третьих лиц.Один из которых, кажется, разработан с Python.Мои приложения повторяют дросселирование на булевых значениях, так как они включены в заглавные буквы.

Пример:

var jsonStr = "{'external_id': 123, 'description': 'Run #2944', 'test_ok': False}";

try{
   var jsonObj = JSON.parse(jsonStr);
}catch(err){
   console.err('Whoops! Could not parse, error: ' + err.message);
}

Обратите внимание на параметр test_ok - все это хорошо, когда он следует Javascript с более низкимcase false вместо логического.Но логическое значение с заглавной буквы не работает.

Конечно, я могу попытаться заменить заглавные логические значения с помощью замены строки, но я боюсь изменить то, что не должно быть изменено.

есть альтернатива JSON.parse, которая немного более прощающая?

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Прежде всего, я бы не рекомендовал использовать код ниже.Это просто для демонстрации того, как преобразовать вашу входную строку в допустимый JSON.Возникли проблемы: одна - логическая False , а другая - одинарные кавычки вокруг имен свойств.Я не уверен, но я считаю, что это должны быть двойные кавычки.

Я не считаю, что преобразование строки в допустимый JSON - это хороший выбор.Если у вас нет альтернативы, что означает, что у вас нет доступа к коду, генерирующему эту строку, то приведенный ниже код по-прежнему не является хорошим выбором, поскольку у него будут проблемы, если вы вставите кавычки в строковые значения.то есть вам нужна другая логика замены строк.

Помните обо всем этом, прежде чем использовать код.

var jsonStr = "{'external_id': 123, 'description': 'Run #2944', 'test_ok': False}";

try {

    jsonStr = jsonStr.replace(/:[ ]*False/,':false' ).replace( /'/g,'"');
    var jsonObj = JSON.parse(jsonStr);
    console.log( jsonObj );
} catch (err) {
    console.err('Whoops! Could not parse, error: ' + err.message);
}
0 голосов
/ 10 марта 2019

Я не хочу быть грубым, но согласно json.org , это недопустимый json.Это означает, что вам придется запустить хак, где вы должны идентифицировать строковый логический «True» и преобразовать его в «true», не затрагивая строку, которая скажет «True dat!»

...