0

更新:编辑问题以提供多级对象示例:

{
  "An.Example": "Dots.are.okay.in.values",
  "Product": {
    "Product.ID.Number": 858383 ,
    "Product.Name": "Bowler Hat",
    "Unit.Cost": 12
  }
}

练习者:https ://try.jsonata.org/ZdaDTJFMA


[原问题] 你好 JSONata 新手再次签到。鉴于此来源,出于本示例的目的,我保持非常简单...

{
  "Product.Name": "Bowler Hat",
  "Product.ID.Number": 858383
}

我怎样才能转换任何“。” 在“_”的键名中?键名不会提前知道,所以我不能简单地硬编码。期望的结果:

{
  "Product_Name": "Bowler Hat",
  "Product_ID_Number": 858383
}

我看了一下这里显示的示例——https: //try.jsonata.org/ry9G5Xr3H——这是对这个问题的回应——查找包含文本的字段并将其替换为另一个文本——但不能来进行适当的调整以满足我的需要。

示例 JSON 和非工作代码 - https://try.jsonata.org/uOwYJOLto

提前感谢您的任何帮助或建议。

4

1 回答 1

1
$each(function($v, $k) {
    { $replace($k, '.', '_'): $v}
}) ~> $merge()

https://try.jsonata.org/uZgm69Bfy

如果要遍历对象的层次结构,则需要编写一个递归函数:

(
    $dotsToUnderscores := $each(?, function($v, $k) {
        { $replace($k, '.', '_'): $type($v) = 'object' ? $dotsToUnderscores($v) : $v}
    }) ~> $merge;
    $dotsToUnderscores($)
)

https://try.jsonata.org/WsfsFGhjEhttps://try.jsonata.org/r2GrHYYou

于 2021-06-01T07:24:18.130 回答