gpt4 book ai didi

json - 如何使用 JMESPath 获取键值对并将它们转换为对象数组

转载 作者:行者123 更新时间:2023-12-04 17:41:45 24 4
gpt4 key购买 nike

我正在寻找使用 JMESPath 更改 3rd 方 API 的数据结构,但一直无法弄清楚如何获取键值对的单个对象并将其重构为对象数组,每个对象都包含键值对。

我已经浏览了所有 JMESPath docsexamples没有找到我一直在使用的特定数据结构。我试过使用 keys(@)values(@)内置函数来获取这些对的键和值,但无法将它们连接到一个数组中。

这是我的原始 JSON 数据

{
"time": 32,
"terms": {
"192.168.10.121": 84,
"154.223.10.121": 12,
"112.149.10.121": 6
}
}

我正在尝试使用 JMESPath 将上述 JSON 数据转换为以下结构。
{
"data": [
{ "ip_address": "192.168.10.121", "count": 84 },
{ "ip_address": "154.223.10.121", "count": 12 },
{ "ip_address": "112.149.10.121", "count": 6 }
]}

我已经能够创建键数组或值数组,但无法创建包含键值对的对象数组。 terms.{ data: keys(@)} terms.{ data: values(@)}
使用结果 terms.{ data: keys(@)}
{
"data": [
"192.168.10.121",
"154.223.10.121",
"112.149.10.121"
]}

使用结果 terms.{ data: values(@)}
{
"data": [
84,
12,
6
]}

这两个函数似乎是我可以用来从包含最初不在数组中的键值对的对象中提取键和值的唯一函数。据我所知,我无法像上面的示例一样将这两个函数结合起来输出单个数组。

我什至不确定使用 JMESPath 是否可行。任何专家意见将不胜感激。

最佳答案

语境

  • jmespath 查询语言
  • 如何将数据从一个结构(架构)重新规范化到另一个
  • 如何有效地迭代和过滤对象属性(名称-值对)

  • 陷阱
  • 一般来说,jmespath 在迭代按顺序索引的数组时非常灵活,但在迭代对象属性时灵活得多
  • 大多数使用 jmespath 的转换变成 极其繁琐当目标是迭代对象属性时
  • 通常,如果您愿意手动“手动构建”输出,您可以在 jmespath 中生成任何任意输出……这通常是处理迭代对象属性(又名名称-值对)时的权衡

  • 例子

    Given the following original dataset ...


    {"time": 32,
    "terms": {
    "192.168.10.121": 84,
    "154.223.10.121": 12,
    "112.149.10.121": 6
    }
    }

    ... the following jmespath query ...


    {"data": [
    { "ip_address": @.terms|keys(@)[0], "count": @.terms|values(@)[0] }
    ,{ "ip_address": @.terms|keys(@)[1], "count": @.terms|values(@)[1] }
    ,{ "ip_address": @.terms|keys(@)[2], "count": @.terms|values(@)[2] }
    ]}

    ... produces the following result


    {"data": [
    { "ip_address": "192.168.10.121", "count": 84 },
    { "ip_address": "154.223.10.121", "count": 12 },
    { "ip_address": "112.149.10.121", "count": 6 }
    ]}

    关于json - 如何使用 JMESPath 获取键值对并将它们转换为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193456/

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