Vincent_Ace
2019-07-23 15:33
采纳率: 66.7%
浏览 1.0k
已采纳

spring boot 使用fastjson反序列化获取字符串的对象 存入数据库表中

String jsonStr = "{\"code\":101,\"timestamp\":2725975361,\"gw\":{\"gwver\":\"JUHE-3.52.10\",\"ver\":\"JUHE-3.52.10\",\"nettype\":\"wireline\",\"chiptype\":\"QCA4531\",\"gwapptype\":\"JUHE_V1\",\"gwtype\":0,\"gwmode\":2,\"id\":\"00ff2c2c2c6a6f005f6b\",\"mac\":\"2c:6a:6f:00:5f:6b\"},\"device\":[{\"id\":\"010100124b001467cd83\",\"ep\":1,\"pid\":260,\"did\":1026,\"ol\":true,\"dn\":\"ShuncomDevice\",\"dtype\":0,\"fac\":\"www.shuncom.com/\",\"ztype\":21,\"dsp\":\"SHUNCOM UIOTZONE\",\"swid\":\"BUIOT-Ali_1.2.11\",\"st\":{\"batpt\":170,\"zsta\":1,\"zstate\":1,\"lqi\":212,\"Supervision\":240,\"dsp\":\"SHUNCOM UIOTZONE\",\"fac\":\"www.shuncom.com/\",\"zid\":0,\"ztype\":21,\"rand\":\"\"}}]}";

处理以上字符串,获取其中对象包括数组中的对象,存入sql数据库表

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 毕小宝 2019-07-23 15:37
    已采纳
    首先, 你需要设计你的数据库表,怎么跟这个 JSON 数据对应起来,数组类型的属性怎么跟数据库字段对应。
    其次,按照你的数据库表定义一个 Java 实体。
    第三步,直接将该 JSON 字符串转换为 第二步的 Java 实体,操作实体 DAO 完成入库。
    
    已采纳该答案
    打赏 评论
  • tkzc_shark 2019-07-23 15:39

    实体类:http://note.youdao.com/noteshare?id=a86d7e1aabfc4a713e52d29dd03ce015

    使用方法

    List<MyBean> temp= JSON.parseObject(fastjson,MyBean.class);
    

    https://www.cnblogs.com/kaixinyufeng/p/8323803.html

    打赏 评论
  • Roc-xb 2019-07-23 19:33

    第一步,首先定义个符合返回数据的JSON的对象模型。
    第二步,使用fastjson中的json解析器进行解析。
    第三步,编写数据库插入代码。
    完结!

    打赏 评论
  • chinarealone 2019-07-24 10:17

    我的理解,将json以对象方式存入数据库的意义不大,实际应用json类型都是看重这种类型本身的精简表达和快速操作。
    所以,从两方面讲:
    1 存入
    对于支持json类型数据库,比如postgresql和mysql,直接选用json类型(都配套相关丰富的内嵌操作函数)
    对于不支持json类型的数据库,比如sql sever,db2等,直接使用varchar或nvarchar存储完整json字符串即可

    2操作
    对于支持json类型数据库,比如postgresql和mysql,直接使用内嵌函数操作即可
    对于不支持json类型的数据库,比如sql sever,db2等,从数据库取出json串后,用客户端解析操作即可(例如js的parseJSON(),java的JSONObject.parseObject())

    打赏 评论
  • Sometimes_Ymc 2019-07-24 10:37

    首先导入核心包fastJson和commons-io包

    <!-- fastJson -->
    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.47</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.4</version>
    </dependency>
    
    

    后台代码:

    package com.shengxun.service.impl;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.shengxun.domian.CmpNo;
    import org.apache.commons.io.FileUtils;
    import org.springframework.util.ResourceUtils;
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.List;
    
    public class JsonData {
    
        public static List<CmpNo> jsonDataString(){
            List<CmpNo> cmpNos = new ArrayList<CmpNo>();
            try {
                String jsonData = FileUtils.readFileToString(ResourceUtils.
                        getFile("classpath:cmp2.json"), Charset.forName("UTF-8"));
                JSONObject jsonObject = JSONObject.parseObject(jsonData);
                JSONArray jsonArray = jsonObject.getJSONArray("rows");
                for (int i = 0; i < jsonArray.size(); i++) {
                    CmpNo cmpNo = new CmpNo();
                    JSONArray jsonArray1 = jsonArray.getJSONArray(i);
                    cmpNo.setId(jsonArray1.getInteger(0));
                    cmpNo.setName(jsonArray1.getString(1));
                    cmpNo.setType(jsonArray1.getString(2));
                    cmpNo.setItype(jsonArray1.getInteger(3));
                    cmpNos.add(cmpNo);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return cmpNos;
        }
        public static void main(String[] args){
            System.out.println(jsonDataString().size());
        }
    }
    

    请确保你的jsonstr是正确的。上面是解析json的,取到值以后 循环插入数据库即可,简单粗暴,但是建议用其它的多条数据插入方式,一般框架上都有。你自己选择。

    打赏 评论

相关推荐 更多相似问题