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

多输入JSON的通用Jolt规范——多输入

叶元凯
2023-03-14

我很难为不同的JSON输入编写jolt规范。我需要一个通用的jolt规范,这样我就可以得到一个扁平的json。

输入 1 : 我们有一个材料运动数组

{
  "id": "xxxxx",

  },
  "status": {
    "deliveryComplete": "xxxxx",

    ],
    "overallStatusDetail": "xxxxx",
    "overallStatus": "xxxxx"
  },
  "quantity": {
    "target": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    }
  },
  "dates": {
    "plannedFinishDate": "xxxxx",
    "plannedStartDate": "xxxxx",
    "actualFinishDate": "xxxxx"
  },
  "consumptionFlag": xxxxx,
  "billOfMaterials": "xxxxx",
  "deletionIndicator": "",
  "routingNumber": "xxxxx",
  "mainWorkCenter": "xxxxx",
  "orderRecipe": "xxxxx",
  "item": {
    "number": "xxxxx",
    "product": {
      "id": "xxxxx",
      "number": "xxxxx",
      "description": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "goodsReceipt": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "storageLocation": {
      "code": "xxxxx",
      "description": "xxxxx"
    }
  },
  "reservation": {
    "id": "xxxxx",
    "number": "xxxxx",
    
  },
  "materialMovements": [
    {
      "id": "xxxxx",
      "number": "xxxxx",
      "postingDate": "xxxxx",
      "items": [
        {
          "number": "xxxxx",
          
          },
          "product": {
            "id": "xxxxx",

          }
          
        }
      ]
    }
    }
  ],
  "sourceSystem": "NA"
}

输入2:我们没有物质运动数组

{
  "id": "xxxxx",

  },
  "status": {
    "deliveryComplete": "xxxxx",

    ],
    "overallStatusDetail": "xxxxx",
    "overallStatus": "xxxxx"
  },
  "quantity": {
    "target": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    }
  },
  "dates": {
    "plannedFinishDate": "xxxxx",
    "plannedStartDate": "xxxxx",
    "actualFinishDate": "xxxxx"
  },
  "consumptionFlag": xxxxx,
  "billOfMaterials": "xxxxx",
  "deletionIndicator": "",
  "routingNumber": "xxxxx",
  "mainWorkCenter": "xxxxx",
  "orderRecipe": "xxxxx",
  "item": {
    "number": "xxxxx",
    "product": {
      "id": "xxxxx",
      "number": "xxxxx",
      "description": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "goodsReceipt": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "storageLocation": {
      "code": "xxxxx",
      "description": "xxxxx"
    }
  },
  "reservation": {
    "id": "xxxxx",
    "number": "xxxxx",
    
  },
  "sourceSystem": "NA"
}

我已经为输入1使用了joltspec,它工作正常,我需要它也为输入2工作

[
  {
    "operation": "shift",
    "spec": {
      "materialMovements": {
        "*": {
          "@(2,sourceSystem)": "[&1].SourceSystem",
          "@(2,number)": "[&1].ProcessOrderNumber",
          "@(2,item.number)": "[&1].ProcessOrderLineNumber",
          "@(2,item.product.number)": "[&1].MaterialToBeProduced",
          "@(2,item.storageLocation.code)": "[&1].StorageLocation",
          "@(2,item.goodsReceipt.amount)": "[&1].GoodsReceiptQuantity",
          "@(2,locationIdentifier.id)": "[&1].Plant",
          "@(2,billOfMaterials)": "[&1].BillOfMaterials",
          "@(2,creationDate)": "[&1].CreationDate",
          "@(2,dates.plannedFinishDate)": "[&1].PlannedFinishDate",
          "@(2,dates.plannedStartDate)": "[&1].plannedStartDate",
          "@(2,actualFinishDate)": "[&1].ActualFinishDate",
          "@(2,deletionIndicator)": "[&1].DeletionIndicator",
          "@(2,quantity.target.amount)": "[&1].OrderQuantity",
          "@(2,quantity.target.baseUoM)": "[&1].UOM",
          "@(2,quantity.confirmed.amount)": "[&1].ConfirmedQuantity",
          "@(2,mainWorkCenter)": "[&1].MainWorkCenter",
          "@(2,orderRecipe)": "[&1].OrderRecipe",
          "@(2,Message Timestamp)": "[&1].LastModifiedOn",
          "@(2,status.overallStatusDetail)": "[&1].StatusDetail",
          "@(2,status.overallStatus)": "[&1].Status",
          "postingDate": "[&1].ActualDeliveryDate"
        }
      }
    }
  }
    ]

共有1个答案

舒仲渊
2023-03-14

您所采用的方法使其更加复杂:

I am not able to understand the Input Json as it is not proper but I guess this solution will help in resolving your issue :

Input : 

    {
  "quantity": {
    "target": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    }
  },
  "dates": {
    "plannedFinishDate": "xxxxx",
    "plannedStartDate": "xxxxx",
    "actualFinishDate": "xxxxx"
  },
  "billOfMaterials": "xxxxx",
  "deletionIndicator": "",
  "routingNumber": "xxxxx",
  "mainWorkCenter": "xxxxx",
  "orderRecipe": "xxxxx",
  "item": {
    "number": "xxxxx",
    "product": {
      "id": "xxxxx",
      "number": "xxxxx",
      "description": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "goodsReceipt": {
      "amount": "xxxxx",
      "baseUoM": "xxxxx",
      "ISOBaseUoM": "xxxxx"
    },
    "storageLocation": {
      "code": "xxxxx",
      "description": "xxxxx"
    }
  },
  "reservation": {
    "id": "xxxxx",
    "number": "xxxxx"
  },
  "materialMovements": [
    {
      "id": "xxxxx",
      "number": "xxxxx",
      "postingDate": "xxxxx",
      "items": [
        {
          "number": "xxxxx"
        },
        {
          "id": "xxxxx"
        }
      ]
    }
  ],
  "sourceSystem": "NA"
}

Jolt Spec :

    [
          {
            "operation": "shift",
            "spec": {
              "quantity": {
                "target": {
                  "*": "[#4].&"
                }
              },
              "dates": {
                "*": "[#3].&"
              },
              "billOfMaterials": "[#2].&",
              "deletionIndicator": "[#2].&",
              "routingNumber": "[#2].&",
              "mainWorkCenter": "[#2].&",
              "orderRecipe": "[#2].&",
              "materialMovements": {
                "*": {
                  "id": "[&1].id",
                  "number": "[&1].number",
                  "items": {
                    "*": {
                      "number": "[&1].no"
                    }
                  }
                }
              }
            }
          }, 
//For Flattening Array to Single Json
{
         "operation": "shift",
         "spec": {
           "*": {
             "*": "&"
           }
         }
      }
            ]
 类似资料:
  • 我很难为不同的JSON输入编写一个jolt规范。我需要得到一个通用的jolt规范,以便得到一个扁平的json 输入1: 输入2: 需要JSON输出- 单个平展 JSON : 我尝试的Jolt规范适用于输入2,但不适用于输入1: 请帮助我很难为不同的 JSON 输入编写颠簸规范。我需要获得一个通用的颠簸规范,以便我得到一个扁平化的 json

  • 我对震动是新手。我有两个不同的相同结构的输入json集,除了一个对象内部不同的基于decider值,如下所示。

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

  • 我正在努力使用 JOLT 转换复杂的 json。 输入JSON: 预期输出: 我无法理解如何在基于“字段名称”的输出中访问和分配“字段值”。请帮我做一下震动测试。 注意:输入JSON中的名称、标题和公司的顺序将是混乱和随机的,这意味着在“data”数组下,第一个对象仅与“Name”相关不是强制性的。

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

  • 我正在尝试用以下规格进行JOLT换班操作,这是不起作用的。不知道我犯了什么错误。在这种情况下需要帮助。输出JSON作为一个对象来代替Array,shift也不能按预期工作。