没有key值,怎么将数据对应【接上一篇】

前言:昨天去了朋友公司写代码,他说发现一个问题,就是数据利用上一篇封装的类去对应数据,返回值是空,然后我说是因为超出边界,然后我查询除了一个问题,在使用Gson gson = new Gson();的时候会将数据库的数据变成Apri 1 ,2018.....出现一个','号,然后上一篇文章中是以‘,’号为分割点,就会出现类属性数据,和截取出来的数据长度不一致的的情况。【也就是超出边界】

 

所以要用的是这个去转换你获取的数据

 Gson gson = new GsonBuilder()
        .setDateFormat("yyyy-MM-dd")
        .create();

重点是我问为啥你查询出来的数据没有key!!key!!key!!呢???

他说这个框架就是这样的。无奈

现在写一个公共的数据映射方法,如果大家也是后台这个框架,请自取成果。

import com.google.gson.Gson;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * Created by xuhaiyan on 2018/5/29.
 */
public class DBStringToBean<T> {

    public <T> List<T> stringToBean(String dbStr, Class<T> clazz) {
        List<T> result = new ArrayList<T>();//返回数据结构封装

        /*--------------------------创建key数组-----------------------*/
        List<String> keyList = new LinkedList<>();
        Field[] fields = clazz.getDeclaredFields();//利用反射原理
        for (Field f : fields) {
            keyList.add(f.getName());
        }

        /*---------------------data部分-------------------------------*/
        String[] valueContentArray = null;
        List<String> dbStringLinkedList = new LinkedList<>();
        dbStr = dbStr.subSequence(dbStr.indexOf("[[") + 2, dbStr.lastIndexOf("]]")) + "";//去掉非法数据结构
        if (!StringUtils.isEmpty(dbStr)) {
            String[] strContentArray = dbStr.split("\\]\\,\\[");//组数再次分成分成list
            for (String strOne : strContentArray) {
                dbStringLinkedList.add(strOne);
            }
        }
        /*string和key组合*/
        try {
            StringBuffer buffer = null;

            for (int i = 0; i < dbStringLinkedList.size(); i++) {
                buffer = new StringBuffer();
                buffer.append("{");
                String stringGetIndexValList = dbStringLinkedList.get(i);
                valueContentArray = stringGetIndexValList.split(",");//list中取值
                for (int j = 0; j < valueContentArray.length; j++) {
                    if (j > 0) {
                        buffer.append(",");
                    }
                    String key = keyList.get(j);
                    buffer.append("\"" + key + "\":" + valueContentArray[j]);
                }
                buffer.append("}");
                T bean = parseJsonWithGson(buffer.toString(), clazz);
                result.add(bean);
            }

        } catch (Exception e) {

        }
        return result;

    }

    /**
     * @param jsonData
     * @param type
     * @param <T>
     * @return
     * @description 将Json一条【数据】解析成相应的映射对象---使用此需要导入gson.jar
     */
    public static <T> T parseJsonWithGson(String jsonData, Class<T> type) {
        Gson gson = new Gson();
        T obj = gson.fromJson(jsonData, type);
        return obj;
    }

    public static void main(String[] args) {
//        String str = "[[\"35\",\"TSQ02-10001\",\"13\",\"基础型主机\",\"三重四级杆质谱系统\",\"TSQ Quantis\",50500.0,46000.0,42000.0],[\"36\",\"OPTON-32101\",\"21\",\"化学喷射装置\",\"大气压化学喷射装置\",\"APCI Source Kit\",1150.0,1050.0,950.0],[\"37\",\"OPTON-30666\",\"22\",\"启动包\",\"启动包\",\"Pre-Installation Kit\",110.0,100.0,90.0],[\"38\",\"OPTON-30626\",\"6\",\"软件\",\"食品安全方向定量软件\",\"TRACE FINDER general quan\",700.0,620.0,550.0],[\"39\",\"5400.0225\",\"13\",\"基础型主机\",\"UHPLC主机\",\"Vanquish Binary Flex w/o Detector\",9200.0,8300.0,7500.0],[\"40\",\"PEAK NM32LA\",\"19\",\"氮气发生器\",\"进口氮气发生器\",\"PEAK NM32LA\",4200.0,3800.0,3400.0],[\"41\",\"SANTAK\",\"20\",\"不间断电源\",\"1小时不间断电源\",\"UPS 10KVA\",730.0,660.0,600.0]]\n";
        String str = "[[\"666047609ba744c4a454d1822d866834\",\"32689d13465242dfad62ee1cdbf34d17\",\"f97721e515924a89b44d41b4c1e45e23\",\"34a16b94c8c04c8685fa4040bece0558\",\"3333\",\"1000009_1000035\",\"1000009_1000035\",\"1000009_1000035.pdf\",2,\"Jul 17, 2018 3:23:48 PM\",null,\"3333\",\"河北\",\"唐山\",\"路北区\",\"3333\",\"wyy\",\"wyy\",\"18838122781\",\"wuyinyin@easylab.com\",\"rrr\",\"18838125845\",\"rrrr\",\"18838456545\",\"江西省\",\"九江市\",\"浔阳区\",\"55555\",\"ICS-900(单机)\",\"ICS-900(单机)\",\"IC\",\"离子色谱\",\"Thermo\",\"ICS-900\",0,0.0,null,\"七月 27, 2018\",\"四月 26, 2019\",9,1.0,50000.0,null,0.0,4500.0,40500.0,null,\"1\",null,null,null,null,0,null,null,\"3f78c353335e445a89c30d87a08d152f\",\"小唐\",\"XT\",2,null,null,null,null,null,null,null,null,0,null,null,0,0,null,6,0]]\n";
        List<ShowOrderDetails> result = new DBStringToBean<ShowModularListBind>().stringToBean(str, ShowOrderDetails.class);
        System.out.println(result);
    }

上述针对的是返回的是list对象数据,格式为[[a,b,c],[d,e,f]]这种格式的,如果大家要返回的是一个对象[a,b,c]则在传入dbStr的时候要变成dbStr = "["+dbStr+"]"即可。

 

ShowOrderDetails是class的名字,大家如果使用这个框架,返回的数据只要是类里面的就行,随便什么类写进去就行

希望大家用这个框架的时候用的顺手

 

pom文件

<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.3.1</version>
</dependency>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值