首页 > 解决方案 > 使用颠簸变换从json中提取值

问题描述

我有一个 json 对象:

{

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

输出json:

{

  "field3": "z"

}
[
  {
    "operation": "shift",
    "spec": {
      "Data": {
        "*field2:*}*": {
          "$(0,2)": "field3"
        }
      }
    }
  }
]

这里“数据”的值是一个完整的字符串而不是 json,因此我必须将它分解为通配符,现在规范中的第二个“*”给了我值“z”。有没有更好的方法来做同样的事情,比如在 field2 之前或之后有一个新字段,那么我不必修改这个正则表达式。

标签: jsontransformationjolt

解决方案


首先,这感觉不像是在 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]}"
}

推荐阅读