zoukankan      html  css  js  c++  java
  • JsonSerializer 对象转json数组

    <resultMap id="AnalogValMap" type="com.cetcht.common.vo.echarts.TimeSeries">
        <result column="name" jdbcType="VARCHAR" property="name" />
        <collection property="values" ofType="com.cetcht.common.vo.echarts.TimeData">
            <result column="val" jdbcType="DECIMAL" property="data" />
            <result column="created_date" jdbcType="TIMESTAMP" property="time" />
        </collection>
      </resultMap>

     collection中的两个字段我想放在 Object[] 中,但是不知道怎么配置,只好暂时先用对象 timedata接收,再做二次处理

    处理后的数据如下:

     处理方案有两种,一种是前端处理:

    async getAnalogData () {
          let {data} = await AnalogVal.timeLineData();
          this.analogHistoryData = data.map(function (item) {
            return {name: item.name, values: item.values.map(function (item) {
              return [item.time, item.data];
            })};
          });
          console.log(this.analogHistoryData)
          this.analogFlag = true
        }

    第二种方案是controller返回的时候自定义对象转json的格式:

    package com.cetcht.common.json;
    
    import java.io.IOException;
    
    import com.cetcht.common.vo.echarts.TimeData;
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
    
    public class TimeDataSerializer extends JsonSerializer<TimeData> {
    
        public TimeDataSerializer() {
            
        }
    
        public void serialize(TimeData timeData, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeStartArray();
            jgen.writeNumber(timeData.getTime());
            jgen.writeNumber(timeData.getData());
            jgen.writeEndArray();
        }
    }
    package com.cetcht.common.vo.echarts;
    
    import java.math.BigDecimal;
    import java.util.Date;
    
    import com.cetcht.common.json.TimeDataSerializer;
    import com.fasterxml.jackson.databind.annotation.JsonSerialize;
    
    @JsonSerialize(using = TimeDataSerializer.class)
    public class TimeData {
        
        /**
         * 值
         */
        private BigDecimal data;
    
        /**
         * 记录入库的时间
         */
        private Date time;
    
        public BigDecimal getData() {
            return data;
        }
    
        public void setData(BigDecimal data) {
            this.data = data;
        }
    
        public long getTime() {
            return time.getTime();
        }
    
        public void setTime(Date time) {
            this.time = time;
        }
    
    }
  • 相关阅读:
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    SVN分支
    SVN分支
    SVN 版本回退
    SVN 版本回退
    如何在excel中取消合并单元格后内容自动填充?
    如何在excel中取消合并单元格后内容自动填充?
    如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/15307869.html
Copyright © 2011-2022 走看看