如何在不破坏对象的情况下替换对象的所有元素中的子字符串

How to Replace Substring in all Elements of Object without Destroying it

我需要替换对象中所有元素的子字符串。

例如替换 val1 和 val2 中的所有 'X':

{
    "input": [
        {
            "val1": "008 X 148",
            "val2": "SOME X DATA"
        },
        {
            "val1": "X 005 5PM",
            "val2": "SOME X DATA"
        },
        {
            "val1": "MODTOX",
            "val2": "X SOME X DATA"
        }
    ]
}

我的初衷是使用 $map,然后使用 $each,如下所示:

$map(input, function($i) 
    { $each($i, function($s) 
        { $replace($s, "X", "Y" ) 
        })
    })

,但正如预期的那样,这会破坏对象。

有什么建议吗?最后 'input' 应该仍然是相同的结构。

您需要使用transform operator修改输入数据的副本:

$ ~> | input |  $each(function($v, $n){{$n: $replace($v, "X", "Y") }} ) ~> $merge() |

https://try.jsonata.org/yeKAKg_U_