代码之家  ›  专栏  ›  技术社区  ›  Peter Kronenberg

如何在反序列化时将对象展开到列表中

  •  0
  • Peter Kronenberg  · 技术社区  · 3 年前

    我正在尝试创建如下的json

    "entries" : [
        {
        "name" : <name>,
        "dataPoint" : [
              [long, double],
              [long, double],
            ]
        }
     ]
    

    每个数据点都是一个长数组和一个双数组的2元素数组

    如果我有这个

    public class Entry {
       private String name;
       private List<DataPoint> dataPoint;
    
      <constructor and getters omitted>
    }
    
    public class DataPoint{
        List<?> data;
    
        public DataPoint(long date, double counts) {
            this.data = List.of(date, counts);
        }
    
        public List<?> getDataPoint() {
            return data;
        }
    }
    

    我最终得到了一个像这样的条目

    {
    "name" : "20070480",
    "data" : [ {
          "dataPoint" : [ 1681792679186, 1096.0 ]
          }, {
          "dataPoint" : [ 1681792680186, 1147.0 ]
          }
    }
    

    @JsonUnwrapped 似乎什么都没做,我也不确定这是我想要的。我不想取消包装。但是,我想将字段包装为列表,而不是包含在对象中

    而我希望它看起来像这样

    {
    "name" : "20070480",
    "dataPoint" : [ 
           [ 1681792679186, 1096.0 ]
           [ 1681792680186, 1147.0 ]
    }
    

    在不编写自己的序列化程序的情况下,有什么方法可以做到这一点吗?

    1 回复  |  直到 3 年前
        1
  •  2
  •   shmosel    3 年前

    只需注释 data (或其吸气剂) @JsonValue :

    @JsonValue
    List<?> data;
    

    这告诉序列化程序处理 数据 作为的唯一代表 this 而不是作为JSON对象中的属性。