当前位置: 首页 > 知识库问答 >
问题:

使用Jolt从json数组中提取键/值对

鄂伟兆
2023-03-14

目前我有以下输入json。我想提取值为attrs.name = Details的对象,并将其附加到输出json中(在attrs数组之外)。目前,虽然我能够将它附加到输出JSON中,但我仍然在attrs中得到该对象的副本。我想要这个副本被删除。

输入 JSON :

{
  "description": "Data",
  "number": "2022",
  "version": 1,
  "attrs": [
    {
      "name": "Type",
      "value": "DataPack"
    },
    {
      "name": "customerName",
      "value": "ABC"
    },
    {
      "name": "Details",
      "value": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
      }
    }
  ]
}

属性。name=“详细信息”可以在attrs中按任意顺序排列

输出量的希望值

{
    "description": "Data",
    "number": "2022",
    "version": 1,
    "attrs": [
        {
            "name": "Type",
            "value": "DataPack"
        },
        {
            "name": "customerName",
            "value": "ABC"
        }
    ],
    "Details": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
    }
}

电流输出

{
  "description": "Data",
  "number": "2022",
  "version": 1,
  "attrs": [
    {
      "name": "Type",
      "value": "DataPack"
    },
    {
      "name": "customerName",
      "value": "ABC"
    },
    {
      "name": "Details",
      "value": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
      }
    }
  ],
  "Details": {
    "createdDate": "2020-09-10",
    "description": "Value Pack",
    "id": "20020",
    "state": "Complete",
    "requestedCompletionDate": "2022-09-13"
  }
}

使用的颠簸规格

[    
  {
    "operation": "shift",
    "spec": {
      "attrs": {
        "*": {
          "name": {
            "Details": {
              "@(2,value)": "Details"
            }
          },
          "value": "attrs[#2].value",
          "@name": "attrs[#2].name"
        }
      },
      "*": "&"
    }
  }
]

有没有办法删除仍在 attrs 数组中的 attrs.name = 详细信息对象?

共有1个答案

文建业
2023-03-14

您需要名称 = 详细信息和其他条件逻辑,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "&", // else case (the attributes other than "attrs" array)
      "attrs": {
        "*": {
          "name": {
            "*": { "@2": "&4" }, // &4 replicates "attrs" (by going up the tree 4 levels)
            "Details": {
              "@(2,value)": "&1" // &1 replicates "Details" (by going up the tree 1 level)
            }
          }
        }
      }
    }
  }
]

现场演示https://jolt-demo.appspot.com/是:

 类似资料:
  • 我的 json 对象中有一个键值对数组,需要根据键等于主机拉出一个设置值。 我无法基于位置进行匹配,因为它可能位于成对数组中的任何位置,而且数组的大小可能会有所不同。 我当前的 Jolt 规格看起来像,但它只是列出了每对: 当前输出为: 我希望的输出如下,注意到字段名称的更改: 我想知道我是否需要先做一个修改-覆盖-测试操作,然后再进行一次转换?

  • 我正在尝试使用jsonPath从JSON数组中提取值。 JSON响应示例: 目前的测试如下: 然而,我一直在处理我的错误代码。我只想知道它的价值。

  • 我得到错误:“com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:Expected BEGIN_OBJECT但是BEGIN_ARRAY位于第1行column 283 path$.items.Promended[0].images” 我请求帮助从json对象提取数据。 我只需要删除类'images',并将'urls'

  • 问题内容: 我知道它是一个数组,但是我对JSON完全陌生,需要帮助理解它的结构,这是我提取数据的尝试: 我拥有的JSON数据如下所示: 我对这些东西的掌握并不强,因此感谢所有帮助。 问题答案: 这是个主意: 它应该可以工作(如果有编译错误,请随时投诉)

  • 编辑:键名称是动态的和未知的。 我想获取一个对象,并创建一个字符串数组,将每个键和值连接在一起。 我的键包含下划线,我需要摆脱(我有这部分工作)。我正在努力弄清楚下一步将所有内容连接在一起。(我想我错过了如何从RHS引用键和值?) 输入: 期望输出: 规格: 电流规格输出:

  • 我正在尝试使用 Jolt 转换来转换 Json,在这里寻找一些输入。我正在尝试过滤一个键,该键是另一个属性的值。这是我的输入和预期输出 我看到的输出是 我试过的规格是 但是我没有得到预期的输出。我也尝试了一些其他组合,但未能获得正确的输出。有人能帮忙吗?