首页 > 解决方案 > JavaScript 中的策略或工具/库在保持顺序的同时交换 JSON 对象中的特定属性?

问题描述

我有许多 JSON 对象,其中包含网页的各种内容。我正在与第三方翻译工具集成以本地化我的内容。只有我的 JSON 对象的某些属性应该被翻译。我需要使用 JavaScript / TypeScript 执行此操作,很可能是在节点“后端”的上下文中。

使用一个简化的例子,我可能有这个 JSON:

{
  "type": "link-list",
  "data": {
    "links": [
      {
        "label": "Why not?",
        "value": "https://www.google.com"
      },
      {
        "value": "https://www.google.com",
        "label": "Super cool tool!"
      }
    ],
    "label": "Why not?",
    "description": "This is super great.",
  }
}

我需要能够创建一个映射,上面写着“任何时候您遇到带有typeof link-list、拉出data.links.label,的内容data.labeldata.description因此可以将它们发送到翻译服务。稍后当翻译服务指示翻译完成时,交换已翻译的内容值返回到它们的原始值。请注意,在此示例中,Why not?可能会根据上下文转换为不同的值,因此进行“字符串替换”或其他事情很重要

一个选项:jsonpath

我大约 99.99% 肯定可以使用的一种解决方案是使用jsonpath。有了这个我可以定义,例如

$.data.label
$.data.links[*]
$.data.description

在配置中,然后遍历这些路径以提取值。然后我可以使用jsonpathapply来“放回”这些值。

这样做的问题是它感觉有点“hacky”——部分原因是我似乎有责任确保这些值被拉出并以相同的顺序放回。我不确定jsonpathgarentees 订购(?)。

我也知道这jmespath是一个更流行的工具,可能是一个更好的选择。

我想知道是否提供所有这些,如果有一个我可能不知道的通用模式或工具可以用来做到这一点。

标签: javascriptjsonjsonpathjmespath

解决方案


推荐阅读