Невозможно получить значение после разбора JSON - PullRequest
1 голос
/ 10 апреля 2020

Я столкнулся с проблемой при преобразовании значения из строки ниже. Пытался разобрать JSON но не получилось.

const val1 = "{a: '123'}";

console.log(typeof(val1)); // string

const a = JSON.parse(val1); // Gives Error: Unexpected token a in JSON at position 1

const b = JSON.parse(JSON.stringify(val1)); 
console.log(b); // {a: '123'}
console.log(b.a); // ---> undefined

console.log(typeof(b)); // string -> How?

Опять же, если я это сделаю, JSON.parse(b) -> Gives error: Unexpected token a in JSON at position.

Может кто-нибудь подсказать, что я делаю неправильно

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Попробуйте следующее

const jsonString = '{"a": "123"}';
const parsedJson = JSON.parse(jsonString);

console.log(parsedJson.a)

проблема заключается в одиночной кавычке в вашей строке json, см. https://www.json.org/json-en.html

Вы можете использовать следующее

const jsonString1 = '{"a": "123"}';
const jsonString2 = "{\"a\": \"123\"}";
0 голосов
/ 10 апреля 2020

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

    const val1 = '{"a": "123"}';

console.log(typeof(val1)); // string

const a = JSON.parse(val1); // a is a json now

const b = JSON.parse(JSON.stringify(val1)); //val1 is already is string so no need to do this
console.log(a); // {a: '123'}
console.log(a.a); // ---> changed to a
const c = JSON.parse(b);
console.log(typeof(b)); // string -> Double stringing but converting to json only once so its still a string
console.log(typeof(c)); // Have to do JSON.parse on b to make it a Object again
0 голосов
/ 10 апреля 2020

Я думаю, что проблема в вашей строке # 4

const b = JSON.parse(JSON.stringify(val1)); 

Вы пытаетесь проанализировать результат

JSON.stringify("{a: '123'}")
, который выдает "строку внутри строки".

enter image description here

Как и предполагалось в предыдущем ответе, убедитесь, что ваш json формат правильный. Используйте инструмент типа https://jsonlint.com/, чтобы проверить json.

0 голосов
/ 10 апреля 2020
const val1 = "{a: '123'}";
console.log(typeof(val1)); // string
const a = JSON.parse(val1); // Gives Error:

Это происходит потому, что val1 здесь не является допустимой строкой json, так как свойство a и его значение внутри объекта не заключено в двойные кавычки. После этого вы можете видеть, что он работает нормально:

const val1 = '{"a": "123"}';
console.log(typeof(val1)); // string
const a = JSON.parse(val1); // It works!
console.log( a )

const b = JSON.parse(JSON.stringify(val1)); 
console.log(b); // {a: '123'}
console.log(b.a); // ---> undefined

b.a здесь undefined, потому что b на самом деле здесь не объект, а строка:

const val1 = "{a: '123'}";
const b = JSON.parse(JSON.stringify(val1));
console.log(b); // {a: '123'}
console.log(typeof b); // string
console.log(b.a); // ---> undefined

Это происходит потому, что

JSON.stringify(val1)

преобразует "{a: '123'}" в ""{a: '123'}"". Он просто добавляет двойные кавычки вокруг val1, поскольку это уже была строка.

, и с помощью JSON.parse он просто удалил из нее двойные кавычки, и мы снова получили строку.

const val1 = "{a: '123'}";
const val2 = JSON.stringify(val1);
console.log( val2 )   // "{a: '123'}" ... its actually ""{a: '123'}""
console.log( typeof val2 )  // string

const val3 = JSON.parse(val2);
console.log( val3 )   // {a: '123'} ... its actually "{a: '123'}"
console.log( typeof val3 )  // string
...