如何修改 JSON string 中的值,只有改动部分产生 diff

2023-02-11 16:51:10 +08:00
 molvqingtai

比如我有这样一个 JSON

{
  "pages": ["pages/index/index"],
  "subpackages": [
    {
      "name": "A",
      "pages": ["innerModule/pages/index/index"]
    },
    {
      "name": "B",
      "pages": ["innerModule/pages/index/index"]
    }
  ]
}

需要实现一个函数找到 subpackages 下面 name === "xxx" 的 object ,然后替换当前的 object ,没有找到就 push 到 subpackages

使用 JSON.parse 很简单,但是会丢失格式信息,导致在 CI 中产生额外的 diff ,有什么很好处理这种场景的 AST 库推荐也行

3001 次点击
所在节点    Node.js
23 条回复
caotian
2023-02-12 21:22:59 +08:00
试试 json patch
libook
2023-02-13 10:25:15 +08:00
取决于你原 JSON 文本是如何产生的。

如果你可以控制原 JSON 文本的生成过程,你可以给字段名进行递归排序,然后利用 stringify 的第 2 、3 位参数(去看一下 stringify 的文档)来格式化生成。后续修改也用相同方式处理,就可以得到除了修改部分一致的 JSON 文本。这个概念通常被称为 json stable stringify ,有一些现成的库可以用。

如果你不能控制原 JSON 文本的生成过程,我没有想到什么好方法,可能只能用正则去匹配和修改文本中要改的那部分了。
molvqingtai
2023-02-13 10:35:16 +08:00
感谢大家回复,已使用 #9 的 chatgpt 答案,改吧改吧解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915183

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX