gpt4 book ai didi

jsonpath - JmesPath 连接或连接嵌套数组元素

转载 作者:行者123 更新时间:2023-12-04 10:04:21 29 4
gpt4 key购买 nike

我意识到这里还有其他几个 JmesPath 连接问题,但是我遇到了一个单独的问题,我没有找到任何示例,我需要连接(即连接)一组动态的 JSON 值 -命名键合并为单个元素。
如果我从以下 JSON 数据结构开始:

{
"data": [
{
"secmeetingdays":
{
"dayset_01":
{
"day_01": "M",
"day_02": "W",
"day_03": "F"
},
"dayset_02":
{
"day_01": "T",
"day_02": "TH"
}
},
}]
}
我想以这样的方式结束:
[
[
"M,W,F"
],
[
"T,TH"
]
]
我已经开始查询以压平数据,但我完全坚持使用连接语法。我尝试的任何东西似乎都不起作用。
  • 尝试 1 :data[].secmeetingdays | [0].*.*
  • [
    [
    "M",
    "W",
    "F"
    ],
    [
    "T",
    "TH"
    ]
    ]
    几乎,但不完全在那里。
  • 尝试 2 :data[].secmeetingdays | [0].*.* | {join(',',@)}

  • 失败
  • 尝试 3 :data[].secmeetingdays | [0].*.*.join(',',@)

  • 失败
  • 尝试 4 :data[].secmeetingdays | {join(',',@[0].*.*)}

  • 失败
  • 我尝试避免使用 2 个扁平化以在连接内部获取一些引用。

  • 尝试 4 data[].secmeetingdays | [0].* | join(',',@[]) .
    失败
  • 尝试 6 data[].secmeetingdays | [0].*.* | @.join(',',[])给出结果,但这不是我想要的:

  • "M,W,F,T,TH"
    更新:
  • 尝试 7 data[].secmeetingdays[].*.* | [].join(',',@)让我更接近,但也不是我所需要的:
  • [
    "M,W,F",
    "T,TH"
    ]
    我也许可以使用这个解决方案,但如果有人对这个问题有准确的答案,我会保持开放。
    这里的例子 https://jmespath.org/有一个连接,但它只在一个项目列表上。如何在不影响父数组结构的情况下加入子数组?

    最佳答案

    data[*].secmeetingdays.values(@)[].values(@).join(',', @).to_array(@)
    为您提供所需输出的示例,但我认为将每个字符串包装在额外的数组中没有任何好处。
    data[].secmeetingdays.values(@) | [*][*].values(@).join(',', @)
    产生更多的逻辑输出(对我而言),因为它为 data 中的每个项目提供了一组日期集。大批:
    [
    [
    "M,W,F",
    "T,TH"
    ]
    ]

    请注意,处理此类数据的正确方法是编写一个脚本来迭代对象、解析键并在对项目进行排序后保证有序输出。 JSON 解析器没有义务保持对象属性的顺序与它们存储/读取的顺序相同,因此盲目地转换为上述数组不一定是您想要的顺序。使用键名来存储订单是多余的。按时间顺序排列的数据应存储为数组,如下所示:
    {
    "data": [
    {
    "secmeetingdays": [
    [
    "M",
    "W",
    "F"
    ],
    [
    "T",
    "TH"
    ]
    ]
    }
    ]
    }

    关于jsonpath - JmesPath 连接或连接嵌套数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61664589/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com