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