Разбор вложенных свойств строки JSON JSON.parse

Я получаю следующую строку из модуля API:

{"value":"{\"Id\":\"100\",\"OrganizationName\":\"[_+-:|;'.\\\/] Arizona 
Grower Automation\"}"}

Когда я использую JSON.parse на стороне клиента, я получаю:

Uncaught SyntaxError: Unexpected token I in JSON at position 12

Это работает, если кавычки внутри дважды экранированы, но каков наилучший способ сделать это? Более конкретно, это возвращается плагином Ionic Capacitor из нативного кода в среду JavaScript.

2 ответа

Решение

Вы должны избежать обратной косой черты, а также двойных кавычек:

/// NO!
JSON.parse('{"value":"{\"Id\":\"100\",\"OrganizationName\":\"[_+-:|;\'.\\\/] Arizona Grower Automation\"}"}');
/// Syntax Error: Unexpected token I in JSON at position 12


/// YES!
JSON.parse('{"value":"{\\\"Id\\\":\\\"100\\\",\\\"OrganizationName\\\":\\\"[_+-:|;\'.\\\/] Arizona Grower Automation\\\"}"}');
/// value: "{"Id":"100","OrganizationName":"[_+-:|;'./] Arizona Grower Automation"}"

Нам нужно три обратных слэша, потому что первые два представляют один экранированный обратный слеш, третий - escape-символ для двойных кавычек.

<script>
var jsonString = "{\"value\":{\"Id\":\"100\",\"OrganizationName\":\"[_+-:|;'.\\\/] Arizona Grower Automation\"}}";

console.log(JSON.parse(jsonString));

</script>

Другие вопросы по тегам