json - 使用颠簸变换从json中提取值
问题描述
我有一个 json 对象:
{
"Data" : "{field1: [x,y],
field2: z}",
}
输出json:
{
"field3": "z"
}
[
{
"operation": "shift",
"spec": {
"Data": {
"*field2:*}*": {
"$(0,2)": "field3"
}
}
}
}
]
这里“数据”的值是一个完整的字符串而不是 json,因此我必须将它分解为通配符,现在规范中的第二个“*”给了我值“z”。有没有更好的方法来做同样的事情,比如在 field2 之前或之后有一个新字段,那么我不必修改这个正则表达式。
解决方案
首先,这感觉不像是在 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]}"
}
推荐阅读
- java - 来自 cacerts 的 Java 密钥库和信任库
- flutter - Flutter auido_service 网络连接不好
- akka - Akka Typed:如何将 ActorRef 获取给本地演员?
- selenium-webdriver - Xpath - 没有这样的元素:无法找到元素:{"method":"xpath","selector":"//*[@id=\"preheader-row-1\"]//tbody/tr/td/ /a//b"
- jquery - Slick Slider - 仅将 CSS 应用于活动幻灯片 - 在无限循环时出现错误
- angular - Angular 11:如何将路由链接添加到动态内容
- r - 尝试在数据框 R 组中按顺序标记
- html - div 与 html 单元格中的段落对齐
- javascript - 我的 checkAuth 功能有什么问题?
- angular - 如何防止`focusout`并重定向到另一种方法