JSON-анализ, вызывающий «неопределенные» значения JSON - Javascript - PullRequest
0 голосов
/ 10 октября 2019

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

Мой нижеприведенный код Javascript возвращает неопределенные значения json:

var req = '{"testId":"12345","ruleId":"678910","rulePassed":true,"testValue":"C:\\ProgramTest\\"}'

var stringified = JSON.stringify(req);
console.log('stringified json ' + stringified);

//json = JSON.parse(JSON.stringify(stringified))
var json = JSON.parse(stringified );
console.log('parsed json ' + json);

//testing different ways of pulling out the data, all undefined  
var testId = json["testId"];
var ruleId = json.ruleId;
var testValue = json[testValue];
console.log('testValue ' + testValue);
var rulePassed = Boolean(json[rulePassed]);

njson = '{"testId": "' + testId + '","ruleId": "' + ruleId + '","testValue": "' + testValue + '","rulePassed": ' + rulePassed + '}';
console.log('final json ' + njson);

Сложность возникает из-за обратной косой черты в свойстве testValue. Если я сначала не приведу в строку json, я получу следующую ошибку:

SyntaxError: Неожиданный токен P в JSON в позиции 143

Как только я, однако, Stringify, а затем проанализирую значениявернитесь как неопределенное.

Кто-нибудь, возможно, знает, что я делаю неправильно, пожалуйста?

Спасибо

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Если вы знаете, что ваши данные никогда не будут должным образом избегать обратной косой черты, быстрое решение заключается в следующем:

var req_escaped = req.replace(/\\/g, "\\\\") // escape backslashes
JSON.parse(req_escaped)

По сути, сделайте вашу строку совместимой с JSON, а затем используйте обычный метод parsed.

0 голосов
/ 10 октября 2019

Если у вас есть контроль над процессом экранирования, путь обратной косой черты должен быть экранирован следующим образом:

\\ должно быть \\\\

Первый экранирование экранирует его встроковый литерал Javascript. Второй escape экранирует его в строковом литерале JSON. Кредиты и более подробная информация .

var req = '{"testId":"12345","ruleId":"678910","rulePassed":true,"testValue":"C:\\\\ProgramTest\\\\"}'

console.log(JSON.parse(req))
0 голосов
/ 10 октября 2019

замена обратной компиляции. также вам нужно добавить "вокруг testValue, когда вы получаете его от json

var req = '{"testId":"12345","ruleId":"678910","rulePassed":true,"testValue":"C:\\ProgramTest\\"}';

var req_escaped = req.replace(/\\/g, "\\\\") // escape backslashes
var json = JSON.parse(req_escaped);
console.log(json);
var testId = json["testId"];
var ruleId = json.ruleId;
var testValue = json["testValue"];
console.log('testValue ' + testValue);
var rulePassed = Boolean(json[rulePassed]);

njson = '{"testId": "' + testId + '","ruleId": "' + ruleId + '","testValue": "' + testValue + '","rulePassed": ' + rulePassed + '}';
console.log('final json ' + njson);
...