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

数组输入 JSON 需要 JOLT 规范

匡安宜
2023-03-14

我正在努力使用 JOLT 转换复杂的 json。

输入JSON:

    { "data":
     [ 
      { 
       "fieldname": "Name", 
       "fieldvalue": [ "John Doe" ] 
    },
     { "fieldname": "Title", 
    "fieldvalue": [ "Manager" ] 
    }, 
    { "fieldname": "Company", 
    "fieldvalue": [ "Walmart" ] 
    }
    ] }
    

预期输出:

    { 
    "finalPayload":{ 
    "PI":{ 
    "EmpName":"John Doe", 
    "EmpRole":"Manager" 
    }, 
    "Company":"Walmart"
     } 
    }
    

我无法理解如何在基于“字段名称”的输出中访问和分配“字段值”。请帮我做一下震动测试。

注意:输入JSON中的名称、标题和公司的顺序将是混乱和随机的,这意味着在“data”数组下,第一个对象仅与“Name”相关不是强制性的。

共有2个答案

郑桐
2023-03-14

我可以介绍一个替代库来解决这个问题。

https://github.com/octomix/josson

implementation 'com.octomix.josson:josson:1.3.21'

-------------------------------------------------

Josson josson = Josson.fromJsonString(
    "{\"data\":[{\"fieldname\":\"Name\",\"fieldvalue\":[\"JohnDoe\"]},{\"fieldname\":\"Title\",\"fieldvalue\":[\"Manager\"]},{\"fieldname\":\"Company\",\"fieldvalue\":[\"Walmart\"]}]}");

JsonNode node = josson.getNode(
    "map(" +
    "  finalPayload: map(" +
    "    PI: map(" +
    "      EmpName: data[fieldname='Name'].fieldvalue[0]," +
    "      EmpRole: data[fieldname='Title'].fieldvalue[0]" +
    "    )," +
    "    Company: data[fieldname='Company'].fieldvalue[0]" +
    "  )" +
    ")");
System.out.println(node.toPrettyString());

输出

{
  "finalPayload" : {
    "PI" : {
      "EmpName" : "JohnDoe",
      "EmpRole" : "Manager"
    },
    "Company" : "Walmart"
  }
}
欧阳元魁
2023-03-14

嗨,希望这有助于您解决问题。您也可以在 Jolt 中设置条件,方法是进入变量内部并检查字段名称。

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "fieldname": {
            "Name": {
              "@(2,fieldvalue)": "finalPayload.PI.EmpName"
            },
            "Title": {
              "@(2,fieldvalue)": "finalPayload.PI.EmpRole"
            },
            "Company": {
              "@(2,fieldvalue)": "finalPayload.Company"
            }
          }
        }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "finalPayload": {
        "PI": {
          "EmpName": "ONE",
          "EmpRole": "ONE"
        },
        "Company": "ONE"
      }
    }
  }
  ]
 类似资料:
  • 我正在尝试用以下规格进行JOLT换班操作,这是不起作用的。不知道我犯了什么错误。在这种情况下需要帮助。输出JSON作为一个对象来代替Array,shift也不能按预期工作。

  • 我的输入JSON如下所示,但是我不确定如何使用JOLT进行内部数组相关的参数转换。感谢任何帮助,因为我是新的JOLT 以下是我创建的规范文件,但它并不完整 预期输出如下 我正在使用这个库https://github.com/bazaarvoice/jolt

  • 我很难为不同的JSON输入编写jolt规范。我需要一个通用的jolt规范,这样我就可以得到一个扁平的json。 输入 1 : 我们有一个材料运动数组 输入2:我们没有物质运动数组 我已经为输入1使用了joltspec,它工作正常,我需要它也为输入2工作

  • 我很难为不同的JSON输入编写一个jolt规范。我需要得到一个通用的jolt规范,以便得到一个扁平的json 输入1: 输入2: 需要JSON输出- 单个平展 JSON : 我尝试的Jolt规范适用于输入2,但不适用于输入1: 请帮助我很难为不同的 JSON 输入编写颠簸规范。我需要获得一个通用的颠簸规范,以便我得到一个扁平化的 json

  • 我想用JOLT规范做JSON到JSON的转换。我有一个输入,它是Flattern JSOn,我想把它隐藏到嵌套JSOn中。我已经为此编写了JOLT规范,下面提到了它。但它并没有给出我所期望的输出。 提前感谢....

  • 我有以下输入json: 输出JSON应如下所示: 任何人都可以就如何为上述内容构建适当的 Bump 规范提供任何指导吗? 非常感谢您的帮助 ^_^