Jolt Transform JSON Spec สำหรับ Array Input

Aug 27 2020

ฉันกำลังพยายามดำเนินการเปลี่ยน JOLT ด้วยข้อมูลจำเพาะด้านล่างซึ่งใช้งานไม่ได้ ไม่แน่ใจว่าทำผิดอะไร ต้องการความช่วยเหลือในกรณีนี้ เอาต์พุต JSON มาเป็นอ็อบเจ็กต์แทน Array และ shift ก็ไม่ทำงานตามที่คาดไว้

    Input : [
      {
        "Header": {
          "Number": 1,
          "Id": "JO"
        },
        "Name": "John"
      },
      {
        "Header": {
          "Number": 2,
          "Id": "JS"
        },
        "Name": "Justin"
      }
    ]
    Spec : [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "Header": "Header",
            "Name": "Header.Name"
          }
        }
      }
    ]
    Expected Output : [
      {
        "Header": {
          "Number": 1,
          "Id": "JO",
          "Name": "John"
        }    
      },
      {
        "Header": {
          "Number": 2,
          "Id": "JS",
          "Name": "Justin"
        }    
      }
    ]
    Actual Output : {
      "Header" : [ {
        "Number" : 1,
        "Id" : "JO",
        "Name" : "John"
      }, {
        "Number" : 2,
        "Id" : "JS"
      } ]
    }

คำตอบ

1 kasptom Aug 27 2020 at 20:46

คุณจะต้องระบุว่า"Header"วัตถุภายในอาร์เรย์

ยิ่งไปกว่านั้นดัชนีของอาร์เรย์ที่คุณวาง"Header"วัตถุสำหรับแต่ละองค์ประกอบของอาร์เรย์

นั่นคือสิ่งที่ข้อกำหนดด้านล่างทำ (โดยใช้[&1]- apmersand wildcardรวมกับอาร์เรย์):

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "Header": "[&1].Header",
        "Name": "[&1].Header.Name"
      }
    }
  }
]

แหล่งที่มา:

  1. Shiftr.java Javadocs :
    • อาร์เรย์
    • สัญลักษณ์แทนเครื่องหมายและ
  2. คำตอบอื่น ๆ : "ฉันจะแปลงอาร์เรย์โดยใช้ Jolt ได้อย่างไร"
  3. แอปพลิเคชันสาธิตที่เชื่อมโยงในjolt repoเพื่อทดสอบข้อมูลจำเพาะ