Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用JMESPath获取键值对并将它们转换为对象数组_Json_Normalization_Jmespath - Fatal编程技术网

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

Json 如何使用JMESPath获取键值对并将它们转换为对象数组,json,normalization,jmespath,Json,Normalization,Jmespath,我希望使用JMESPath更改第三方API的数据结构,但还没有弄清楚如何获取包含键值对的单个对象,并将其重新构造为包含键值对的对象数组 我已经浏览了所有的,但没有找到我一直在使用的特定数据结构。我曾尝试使用和内置函数获取这些对的键和值,但未能将它们合并到一个数组中 这是我的原始JSON数据 { "time": 32, "terms": { "192.168.10.121": 84, "154.223.10.121": 12, "112.14

我希望使用JMESPath更改第三方API的数据结构,但还没有弄清楚如何获取包含键值对的单个对象,并将其重新构造为包含键值对的对象数组

我已经浏览了所有的,但没有找到我一直在使用的特定数据结构。我曾尝试使用和内置函数获取这些对的键和值,但未能将它们合并到一个数组中

这是我的原始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(@)}

使用
术语时的结果。{data:keys(@)}

使用
术语时的结果。{data:values(@)}

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

我甚至不确定使用JMESPath是否可以做到这一点。如有任何专家意见,将不胜感激。

  • jmespath查询语言
  • 如何将数据从一个结构(模式)重新规范化到另一个结构(模式)
  • 如何有效地迭代和过滤对象属性(名称-值对)
陷阱
  • 一般来说,jmespath在迭代顺序索引数组方面非常灵活,但在迭代对象属性方面灵活性要小得多
  • 当目标是迭代对象属性时,使用jmespath进行的大多数转换都会变得非常麻烦
  • 如果您愿意手动“手动构造”输出,通常可以在jmespath中生成任意输出。。。在处理对象属性(也称为名称-值对)的迭代时,这通常是一种折衷
例子 给定以下原始数据集

。。。以下jmespath查询

。。。生成以下结果

{
"data": [
    "192.168.10.121",
    "154.223.10.121",
    "112.149.10.121"
]}
{
"data": [
    84,
    12,
    6
]}
{"time": 32,
    "terms": {
        "192.168.10.121": 84,
        "154.223.10.121": 12,
        "112.149.10.121": 6
    }
}
{"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] }
]}
{"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 }
]}