解析包含字符串化数组的字符串化 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);