javascript - 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.",
}
}
我需要能够创建一个映射,上面写着“任何时候您遇到带有type
of link-list
、拉出data.links.label
,的内容data.label
,data.description
因此可以将它们发送到翻译服务。稍后当翻译服务指示翻译完成时,交换已翻译的内容值返回到它们的原始值。请注意,在此示例中,Why not?
可能会根据上下文转换为不同的值,因此进行“字符串替换”或其他事情很重要。
一个选项:jsonpath
我大约 99.99% 肯定可以使用的一种解决方案是使用jsonpath。有了这个我可以定义,例如
$.data.label
$.data.links[*]
$.data.description
在配置中,然后遍历这些路径以提取值。然后我可以使用jsonpathapply
来“放回”这些值。
这样做的问题是它感觉有点“hacky”——部分原因是我似乎有责任确保这些值被拉出并以相同的顺序放回。我不确定jsonpath
garentees 订购(?)。
我也知道这jmespath
是一个更流行的工具,可能是一个更好的选择。
我想知道是否提供所有这些,如果有一个我可能不知道的通用模式或工具可以用来做到这一点。
解决方案
推荐阅读
- google-cloud-bigtable - 获取整行的最佳方法,其中某列 = 某个值?
- azure - IoT Hub 的 ip 过滤规则的 Terraform 顺序
- apache-kafka - Kafka 生产者将消息发布到辅助集群
- mavlink - Mavlink命令中的[180]是什么意思?
- c# - 如何将此 sql 转换为 efcore linq
- macos - Shell命令“where”重复输出
- python - Monkeypatching 内置插件
- go - 通过代理重新发送时出现“无法在客户端请求中设置 Request.RequestURI”错误
- scala - 隐式提取 Scala 函数名和参数
- string -
在 Arduino SoftwareSerial (iSerial.println(String_Variable)) 中使用/操作字符串变量