Jolt规范可在数组内转换JSON数组

时间:2020-11-03 09:48:06

标签: json jolt

我正在尝试将JSON文件转换为可以稍后转换为csv或xml的内容。我的JSON文件如下所示:

{
  "meta": {
    "contentType": "Response"
  },
  "content": {
    "_type": "Response",
    "data": {
      "_type": "ObjectList",
      "meta": {
        "_type": "ObjectListMeta"
      },
      "DataObjects": [
        {
          "head": {
            "fields": {
              "id": {
                "value": "24"
              },
              "name": {
                "value": ""
              }
            }
          },
          "table": [
            {
              "number": 1,
              "fields": {
                "height": {
                  "value": 500,
                  "text": "500"
                },
                "average": {
                  "value": -2,
                  "text": "-2"
                }
              }
            },
            {
              "number": 2,
              "fields": {
                "height": {
                  "value": 99999,
                  "text": "99999"
                },
                "average": {
                  "value": -5,
                  "text": "-5"
                }
              }
            }
          ]
        }
      ]
      }
    }
  }
}

我希望输出看起来像这样:

[
{
  "id" : "24",
  "name" : "",
  "height" : 500,
  "average" : -2
},
 {
  "id" : "24",
  "name" : "",
  "height" : 99999,
  "average" : -5
 }
]

我尝试了以下JOLT规范:

[
  {
    "operation": "shift",
    "spec": {
      "content": {
        "data": {
          "DataObjects": {
            "*": {
              "head": {
                "fields": {
                  "id": {
                    "value": "[&4].id"
                  },
                  "name": {
                    "value": "[&4].name"
                  }
                }
              },
              "table": {
                "*": {
                  "fields": {
                    "height": {
                      "value": "[&5].height"
                    },
                    "average": {
                      "value": "[&5].average"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

但是我只得到以下输出:

[ {
  "id" : "24",
  "name" : "",
  "height" : [ 500, 99999 ],
  "average" : [ -2, -5 ]
} ]

这不是我想要的。我该如何修改规格以获得所需的输出?

1 个答案:

答案 0 :(得分:0)

您可以将 table 列表下的这些属性组合为 多个 各自的对象,用于 一个 head.fields对象如

[
  {
    "operation": "shift",
    "spec": {
      "content": {
        "*": {
          "DataObjects": {
            "*": {
              "table": {
                "*": {
                  "@(2,head.fields.id.value)": "[&].id",
                  "@(2,head.fields.name.value)": "[&].name",
                  "@(0,fields.height.value)": "[&].height",
                  "@(0,fields.average.value)": "[&].average"
                }
              }
            }
          }
        }
      }
    }
  }
]