JSON 解析后无法获取值

Unable to get value after JSON parsing

我在转换以下字符串的值时遇到问题。试图解析 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.

谁能指出我做错了什么

尝试以下方法

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\"}";
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

我认为问题出在您的第 4 行

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

您正在尝试解析

JSON.stringify("{a: '123'}")
的结果 这会产生 "string inside string".

如之前的回答所建议,确保您的 json 格式正确。 使用像 https://jsonlint.com/ 这样的工具来检查你的 json.

更改了下面的代码。请检查它是否有效。

    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