通过通用键名将平面JSON转换为嵌套JSON分组

用户名

我正在使用JQPlay播放格式。我不明白如何使用归约子结构。我想根据组织或父ID进行分组。

只需更新我的jqplay过滤器,但无法删除两个按ID分组的标签。

jq播放语法-

我在jqplay.org中使用以下语法。也可以请您提出如何在管道符号后调试任何内容的建议。

.items | {"org" : map( {id : .org, orgProperties : [{"properties" : {"methodId" : [{"id" : .methodId}]}}]})| group_by(.id) | map( reduce .[] as $x (.[0]|{}; .orgProperties+= ($x | .orgProperties)))}

输入JSON

{
  "items": [
    {
      "org": "750141",
      "methodId": "1-10F7IAK7"
    },
    {
      "org": "750141",
      "methodId": "1-10TP18L0"
    },
    {
      "org": "750142",
      "methodId": "1-10TP18L1"
    }
  ]
}

输出JSON

{
  "org": [
    {
      "orgProperties": [
        {
          "properties": {
            "methodId": [
              {
                "id": "1-10F7IAK7"
              }
            ]
          }
        },
        {
          "properties": {
            "methodId": [
              {
                "id": "1-10TP18L0"
              }
            ]
          }
        }
      ]
    },
    {
      "orgProperties": [
        {
          "properties": {
            "methodId": [
              {
                "id": "1-10TP18L1"
              }
            ]
          }
        }
      ]
    }
  ]
}

预期的JSON输出

{
  "org": [
    {
      "id": "750141",
      "orgProperties": [
        {
          "properties": {
            "methodId": [
              {
                "id": "1-10F7IAK7"
              },
              {
                "id": "1-10TP18L0"
              }
            ]
          }
        }
      ]
    },
        {
      "id": "750142",
      "orgProperties": [
        {
          "properties": {
            "methodId": [
              {
                "id": "1-10TP18L1"
              }
            ]
          }
        }
      ]
    }
  ]
} 
伊尼安

您需要执行以下操作。您需要先group_by()进行处理

jq '.items | {org: group_by(.org) | map({id: .[0].org, orgProperties: [{properties: { methodId: map({id: .methodId}) }}]})} ' input.json

我认为没有办法提高调试的详细程度,jq除非可能修改代码以添加自己的调试语句并运行自定义构建。

我个人一次从一个组件构建过滤器,观察其输出并在此之上进行操作。分解以上功能

  • '.items | {org: ..在过滤器一部分之后,JSON会完全重建后续部分的结果形成了现在在顶层以下"org"的预期输出。
  • 一旦执行group_by(.org),您将得到一个包含两个数组条目的结果,一个包含2个对象(id 750141),另一个包含单个对象(id 750142)。
  • 然后map(..),在上一步返回的对象列表中运行代码
  • 我们只需要在最终结果中使用唯一的键名称,因此我们只.[0].org在第一个数组中使用。即使您有多个重复的键名称,此功能也可以使用。暂停并查看输出,直到这一点

    {
      "org": [
        {
          "id": "750141"
        },
        {
          "id": "750142"
        }
      ]
    }
    
  • 现在,构建其余的输出,orgProperties: [{properties: { methodId: ...使用这些输出创建子节点

    "orgProperties": [
    {
        "properties": {
            "methodId": 
    
  • 创建最终的子数组,map({id: .methodId})以创建带有ID列表的键值对

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将嵌套 JSON 转换为平面 JSON

来自分类Dev

python:使用添加的键名将Counter对象转换为json对象

来自分类Dev

将嵌套的 JSON 数组转换为平面 JSON 数组

来自分类Dev

使用GSON将JSON转换为嵌套对象(通用对象)

来自分类Dev

如何使用Google Apps脚本将平面JSON数组转换为嵌套JSON?

来自分类Dev

使用FOR JSON将平面SQL行转换为嵌套JSON数组

来自分类Dev

杰克逊:如何将平面 json 转换为嵌套 json

来自分类Dev

使用正确的列名将 JSON 转换为数据框

来自分类Dev

通过 XQuery 将嵌套的 XML 转换为平面 xml

来自分类Dev

通过ChoETL在C#中将嵌套JSON转换为CSV

来自分类Dev

将制表符分隔的平面文件转换为Json嵌套结构

来自分类Dev

如何将平面JavaScript对象数组转换为嵌套的分层JSON结构?

来自分类Dev

在 C# 中递归地将嵌套的 JSON 转换为平面数组

来自分类Dev

检查嵌套JSON中的键名

来自分类Dev

检查嵌套json中的键名

来自分类Dev

将 JSOn 对象转换为平面 JSON 数组

来自分类Dev

Javascript json转换为嵌套json

来自分类Dev

如何通过例如将嵌套对象转换为JSON中的JSON字符串来防止嵌套JSON?

来自分类Dev

JavaScript将平面数组转换为嵌套/分组和排序的数组

来自分类Dev

使用列标题将平面JSON转换为TSV文件

来自分类Dev

将平面 JSON 转换为父子关系结构

来自分类Dev

在javascript中将平面json文件转换为树结构

来自分类Dev

在GO中将嵌套的JSON转换为csv

来自分类Dev

将Powershell转换为嵌套Json

来自分类Dev

将嵌套的JSON转换为CSV

来自分类Dev

将CSV转换为嵌套Json

来自分类Dev

将嵌套的Json转换为单个键值对

来自分类Dev

PowerShell将CSV转换为嵌套Json

来自分类Dev

将嵌套的Json转换为CSV Python

Related 相关文章

热门标签

归档