【问题标题】:Parse a stringified JSON containing a stringified array解析包含字符串化数组的字符串化 JSON
【发布时间】:2020-12-14 01:11:00
【问题描述】:

我遇到了一些我不完全理解的问题,但我尝试了也无法解决。

假设我有一个对象:

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

【问题讨论】:

  • 请您也分享错误
  • “假设我有一个 JSON”——这是一个 object,而不是 JSON。 JSON 是当您从JSON.stringify 获取时。见benalman.com/news/2010/03/theres-no-such-thing-as-a-json
  • 对 JSON 字符串进行查找和替换听起来是一种很好的破解方法。循环遍历对象的属性并一次替换一个值。
  • 我会以其他方式进行,但我确实需要一个特定的方法,它通常需要字符串并进行替换,以获取该对象(我无法修改所述方法)

标签: javascript json stringify


【解决方案1】:

当您使用 .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);

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2011-12-19
    • 1970-01-01
    • 2019-04-03
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多