从下面的字符串转换值时遇到问题。试图解析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.
有人可以建议我做错了吗
答案 0 :(得分:2)
尝试以下
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\"}";
答案 1 :(得分:0)
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
答案 2 :(得分:0)
我认为问题出在您的第4行
const b = JSON.parse(JSON.stringify(val1));
您正在尝试解析
JSON.stringify("{a: '123'}")的结果 产生一个“字符串内的字符串”。
如先前的答案建议,请确保您的json格式正确。 使用https://jsonlint.com/之类的工具来检查您的json。
答案 3 :(得分:0)
更改了以下代码。请检查它是否有效。
aws_iam_resource