解析包含字符串化数组的字符串化 JSON
Parse a stringified JSON containing a stringified array
我遇到了一些我不完全理解并且无法解决的问题。
假设我有一个对象:
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()
的 replacer 函数来首先解析您的字符串,然后再解析整个对象。
参见下面的示例:
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);
我遇到了一些我不完全理解并且无法解决的问题。
假设我有一个对象:
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()
的 replacer 函数来首先解析您的字符串,然后再解析整个对象。
参见下面的示例:
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);