You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Jolt Spec将对象转为数组适配Java POJO

问题:将扁平JSON转换为适配Java POJO的数组结构

我有一个JSON输入,希望将其转换为便于存储到Java POJO的JSON结构,数组结构最适合实现该需求。

输入JSON:

{
  "rating-1": {
    "min": 1,
    "max": 2
  },
  "rating-2": {
    "min": 3
  }
}

期望转换后的JSON:

{
  "Ratings" : [
    {
      "rating": "rating-1",
      "min": 1,
      "max": 2
    },
    {
      "rating": "rating-2",
      "min" : 3
    }
  ]
}

我尝试了以下Jolt Spec(注意rating-*内部分元素可能为空或null):

[
  {
    "operation": "shift",
    "spec": {
      "rating-*": {
        "$": "Ratings[#0].&1.rating",
        "min": "Ratings[#0].&1.min",
        "max": "Ratings[#0].&1.max"
      }
    }
  }
]

得到的输出JSON如下:

{
  "Ratings" : [ {
    "rating-1": {
      "rating": "rating-1",
      "min": 1,
      "max": 2
    },
    {
      "rating": "rating-2",
      "min": 3
    }
  } ]
}

问题是该输出生成了多余的"rating-1"/"rating-2"键,不利于创建对应的Java对象,请问需要编写什么样的Jolt Spec才能得到期望的输出?


解决方案

调整Jolt的shift操作,移除多余的层级映射,直接将字段放到数组元素的平级结构中即可:

正确的Jolt Spec:

[
  {
    "operation": "shift",
    "spec": {
      "rating-*": {
        "$": "Ratings[#2].rating",
        "min": "Ratings[#2].min",
        "max": "Ratings[#2].max"
      }
    }
  }
]

关键说明:

  • #2用于获取当前rating-*键对应的数组索引,确保每个rating-*条目都被映射到Ratings数组的独立元素中
  • $直接取当前的键名(如rating-1)赋值给rating字段,避免通过&1保留原层级
  • min和max直接映射到数组元素的同层级字段,完全消除多余的嵌套键

这个Spec会生成你期望的扁平化数组结构,完美适配Java POJO的定义(比如一个包含rating、min、max字段的Rating类,再用List<Rating>组成Ratings属性)。


内容的提问来源于stack exchange,提问作者Suvid Sahay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:03:21