使用Jolt转换从JSON提取值

时间:2018-12-05 08:36:52

标签: json transformation jolt

我有一个json对象:

{

"Data" : "{field1: [x,y],
           field2: z}",

}

输出json:

{

"field3": "z"

}

"operation": "shift",
"spec": 

{

"Data" : {
    "*field2:*}*" : {
    $(0,2) : "field3"
    }
}
}

这里“ Data”的值是一个完整的字符串,而不是json,因此我必须将其分成通配符,现在规范中的第二个“ *”给我值“ z”。有没有更好的方法可以做到这一点,例如说在field2之前或之后出现一个新字段,那么我就不必修改此正则表达式。

1 个答案:

答案 0 :(得分:0)

首先,这似乎不希望在JOLT中解决,而是应该提取Data并将其序列化为JSON。

那是说我设法解决了一些问题,内联说明:

[
  //Remove {
  {
    "operation": "shift",
    "spec": {
      "Data": {
        "{*": {
          "$(0,1)": "Data"
        }
      }
    }
  },
  //Remove }
  {
    "operation": "shift",
    "spec": {
      "Data": {
        "*}": {
          "$(0,1)": "Data"
        }
      }
    }
  },
  // Split by ,
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Data": "=split(',', @(2,Data))"
    }
  },
  // Trim
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Data": {
        "*": "=trim"
      }
    }
  },
  // Select field2
  {
    "operation": "shift",
    "spec": {
      "Data": {
        "*": {
          "field2:*": {
            "$(0,1)": "field3"
          }
        }
      }
    }
  },
  // Trim again
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=trim"
    }
  }
]


经过测试:

{
  "Data": "{field1: [x,y], field2: z}"
}

{
  "Data": "{ field2: z, field1: [x,y]}"
}

{
  "Data": "{field1: [x,y], field2: z, field3: [x,y]}"
}