json JOLT:如何仅在列表不为空时转换列表

uoifb46i  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(143)

我想使用JOLT规范转换JSON数组。

[
  {
    "list": [ "item1" ]
  }
]

我想要的输出:

[
  {
    "list": [
      {
        "listType": "1",
        "listValue": "item1"
      }
    ]
  }
]

目标是将每个条目转换为包含type属性的JSON对象。这是我迄今为止的jolt规范:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "list": {
          "*": {
            "#1": "[&3].&2[&1].listType",
            "@(0)": "[&3].&2[&1].listValue"
          }
        }
      }
    }
  }
]

只要列表不为空,这个方法就可以正常工作,但是如果我传递一个空列表"list": [],那么这个属性在转换后的JSON中将被忽略,在这种情况下,我希望在输出中也将其转换为一个空列表,也就是说,这个属性所需的转换也是"list": []
我发现了一些建议,试图用默认规范来实现这一点,但问题是,如果属性在原始JSON中不存在,我不希望添加空列表。在这种情况下,我不希望在输出中看到这个字段。我只希望看到一个空列表,如果一开始输入中就有一个空列表。
这可能吗?我也很乐意使用一个需要空值而不是空列表的解决方案,即"list": null将转换为"list": [],如果这会更容易的话。

    • 编辑**:下面再举几个例子来说明我正在努力实现的目标:
    • 案例1:**
[
        {
            "list": ["item1"],
            "attribute2": "abc"
        }
    ]

应该转变为

[
      {
        "list": [
          {
            "listType": "1",
            "listValue": "item1"
          }
        ],
        "attribute2": "abc"
      }
    ]
    • 案例2:**
[
        {
            "list": [],
            "attribute2": "abc"
        }
    ]

应该转变为

[
      {
        "list": [],
        "attribute2": "abc"
      }
    ]
    • 案例3**
[
        {
            "attribute2": "abc"
        }
    ]

应该转变为

[
      {
        "attribute2": "abc"
      }
    ]

(no案例3中的"list"属性)

fcwjkofz

fcwjkofz1#

可以使用此等级库:

[
  {
    "operation": "shift",
    "spec": {
      "@": "aaa",
      "*": {
        "list": {
          "*": {
            "#1": "bbb[&3].&2[&1].listType",
            "@(0)": "bbb[&3].&2[&1].listValue"
          }
        },
        "*": "bbb[&1].&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "aaa": {
        "@": "ccc[]",
        "*": {
          "list": {
            "*": {
              "@(5,bbb)": "ccc[]"
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "ccc": "=lastElement"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ccc": ""
    }
  }
]
    • 输入1:**
[
  {
    "list": [
      "item1"
    ]
  }
]
    • 输出1:**
[ {
  "list": [ {
    "listType": "1",
    "listValue": "item1"
  } ]
} ]
    • 输入2:**
[
  {
    "list": []
  }
]
    • 产出2:**
[ {
  "list": []
} ]
    • 输入3:**
[
  {
    "list": null
  }
]
    • 产出3:**
[ {
  "list": null
} ]
    • 输入4:**
[
  {}
]
    • 产出4:**
[ {} ]
    • 输入5:**
[]
    • 产出5:**
[]
k4emjkb1

k4emjkb12#

您可以使用以下规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "list": {
          "*": {
            "@": "&2[#2].listValue",
            "#1": "&2[#2].listType"
          }
        },
        "*": "&"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "list": null
    }
  }
]

为了得到

{
  "list" : null
}

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "list": {
          "*": {
            "@": "&2[#2].listValue",
            "#1": "&2[#2].listType"
          }
        },
        "*": "&"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "list": []
    }
  }
]

为了得到

{
  "list" : [ ]
}

对于输入

[
  {
    "list": [ ]
  }
]

对非空情况没有影响

相关问题