我正在努力改变
{
"outputs": [
{
"type": "Sample"
},
{
"type": "Sample1",
"indexNamePrefix": "Sample2",
"serviceUri": "Sample3",
"eventDocumentTypeName": "Sample4"
}
]
}
变成这样的事情
{
"outputs": [
{
"type": "Sample"
},
{
"type": "Sample1",
"indexNamePrefix": "Sample2",
"serviceUri": "NewValue",
"eventDocumentTypeName": "Sample4"
}
]
}
我已经根据你的例子尝试了几种转换
尝试 1:我只是尝试替换 serviceUri,这是唯一的更改,以下是转换
{
"outputs": {
"@jdt.replace": {
"@jdt.path": "@[?(@.serviceUri == Sample3)]",
"@jdt.value": {
"serviceUri": "NewValue"
}
}
}
}
结果如下所示,与变换类似,但看起来并没有发生变换
{
"outputs": {
"@jdt.replace": {
"@jdt.path": "@[?(@.serviceUri == Sample3)]",
"@jdt.value": {
"serviceUri": "NewValue"
}
}
}
}
尝试2: 我尝试更换整个输出节点
{
"outputs": {
"@jdt.replace": [
[
{
"type": "Sample"
},
{
"type": "Sample1",
"indexNamePrefix": "Sample2",
"serviceUri": "NewValue",
"eventDocumentTypeName": "Sample4"
}
]
]
}
}
结果也与这里的转换相同,我错过了什么吗?因为基本的删除和重命名转换工作正常。
这是我关注的链接https://github.com/Microsoft/json-document-transforms
提前致谢
五年后,我仍然找不到这个基本问题的好答案。
我发现
@jdt.merge
、@jdt.replace
、@jdt.path
和 @jdt.value
命令似乎可以从文档的根开始工作,但我无法让它们从节点内解析,如示例所示你引用了。
这样的东西应该有效:
{
"@jdt.replace": [
{
"@jdt.path": "$.outputs[?(@.type == 'Sample1')].serviceUri",
"@jdt.value": "NewValue"
}
]
}
$
表示文档的根。然后我们深入到 outputs
并使用 [?(...)]
进行搜索。 搜索参数中的 @
表示当前对象(即输出数组项),我们在其中搜索匹配的 type
属性并将其设置为“NewValue”。
您还可以使用此语法来更新节点上的多个属性:
{
"@jdt.merge": [
{
"@jdt.path": "$.outputs[?(@.type == 'Sample1')]",
"@jdt.value": {
"serviceUri": "NewValue",
"eventDocumentTypeName": "NewValue2"
}
}
]
}
@jdt.merge
表示仅更新提供的值。 如果您使用 @jdt.replace
,则该节点将仅包含这两个值。