Jolt 将多个对象转换为具有新字段名称的数组

Posted

技术标签:

【中文标题】Jolt 将多个对象转换为具有新字段名称的数组【英文标题】:Jolt transform several object to array with new field name 【发布时间】:2022-01-19 09:55:44 【问题描述】:

我是使用 jolt 工具的新手,我想知道是否有办法获取几个 json 对象并将它们放入一个具有如下新字段的数组中:

输入


  "userId": 1,
  "age": 20,
  "desc1": "value desc1",
  "desc2": "value desc2",
  "desc3": "value desc3"

JSON 规范

[
  
    "operation": "shift",
    "spec": 
      "userId": "ID",
      "age": "age",
      "*": "additionalInformation"
    
  
]

预期结果


  "ID": 1,
  "age": 20,
  "additionalInformation": [
    
      "code": "desc1",
      "value": "value desc1"
    ,
    
      "code": "desc2",
      "value": "value desc2"
    ,
    
      "code": "desc3",
      "value": "value desc3"
    
  ]

使用上面的规范我只能得到这个结果


  "ID": 1,
  "test": 20,
  "additionalInformation": [
    "value desc1",
    "value desc2",
    "value desc3"
  ]

有什么我错过的建议吗?

【问题讨论】:

【参考方案1】:

$@ 通配符可以分别用于 codevalue,同时组合 common 下的元素在第一步中使用 &. 作为它们的前缀。然后在上一步将IDage以外的元素合并到同一个数组中,如

[
  
    "operation": "shift",
    "spec": 
      "userId": "ID",
      "age": "age",
      "*": 
        "$": "&.code",
        "@": "&.value"
      
    
  ,
  
    "operation": "shift",
    "spec": 
      "ID": "&",
      "age": "&",
      "*": "additionalInformation[]"
    
  
]

编辑由于评论):如果您需要选择一些单独的元素,例如 desc1desc3 而不是 all("*"),然后将第一个规范替换为以下

  
    "operation": "shift",
    "spec": 
      "userId": "ID",
      "age": "age",
      "desc1|desc3": 
        "$": "&.code",
        "@": "&.value"
      
    
  

【讨论】:

非常感谢@Barbaros,这正是我所期待的。但是,如果我们只需要选择特定字段将它们放入数组中(例如 desc1 和 desc3),则通配符无法做到这一点,因为它需要所有其他可用字段 感谢您的帮助。我最终使用了在文档中找到的另一种方式也适合我的需要,但是我仍然很难删除在上面屏幕中提到的输出中生成的空值。有什么建议吗? 嗨@Yawyaw1。让我们通过恢复上次更新来保留这个问题,因为它已经被回答了,并且请在添加新规范的同时询问另一个问题。

以上是关于Jolt 将多个对象转换为具有新字段名称的数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:将具有父键的对象数组转换为父/子树(包括没有父的对象)

如何将数据从多个输入字段转换为单个 JSON 对象以进一步将其插入单个 mysql 字段

在循环中创建多个具有不同名称的对象以存储在数组列表中

js 对象里 增加删除一项字段 (把某对象里的数组转换为字符串,重组为新对象)

如何将数据从对象传递到javascript中的新数组?

如何正确地将具有多个元素的新对象推送到数组中?