问题描述
我遇到了一些我不完全理解并且无法解决的问题,但是我尝试了。
说我有一个对象:
const jsonExample = {
textToReplace: 'My text',arrayToReplace: 'My array: ${arrayParam}',};
我需要对这个对象进行字符串化以替换arrayParam
:
const myArray = ['foo','bar'];
const stringifiedJson = JSON.stringify(jsonExample).replace('${arrayParam}',JSON.stringify(myArray));
然后我需要将其解析回一个对象,并取回我的数组:
const newJson = JSON.parse(stringifiedJson);
但是在字符串化数组的开头出现SyntaxError。有什么我想念的吗?
我知道这是一种相当复杂的处理方式,但是在我真正的问题中,我有一个迭代替换方法,该方法直到现在都只处理字符串,但是我还需要它来替换数组。
谢谢!
编辑:错误是:
SyntaxError: Unexpected token f in JSON at position 57
解决方法
使用.replace()
时,您要在字符串对象中添加字符串[\"foo\",\"bar\"]
:
"{\"textToReplace\":\"My text\",\"arrayToReplace\":\"My array: [\"foo\",\"bar\"]\"}"
在解析时,\"My array: [\"
上方将被解释为"arrayToReplace"
的值。因此,以下f
被解释为令牌,而不是字符串值的一部分,从而导致错误。
您可以使用JSON.stringify()
的{{3}}函数先解析字符串,然后解析整个对象。
请参见以下示例:
const jsonExample = {
textToReplace: 'My text',arrayToReplace: 'My array: ${arrayParam}',};
const myArray = ['foo','bar'];
const stringifiedJson = JSON.stringify(jsonExample,(key,val) =>{
return typeof val === "string"
? val.replace('${arrayParam}',JSON.stringify(myArray))
: val;
});
const newJson = JSON.parse(stringifiedJson);
console.log(newJson);