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数据库表

tiankongzhichenglyf
tkzc_shark 求采纳
12 个月之前 回复

5个回答

首先, 你需要设计你的数据库表,怎么跟这个 JSON 数据对应起来,数组类型的属性怎么跟数据库字段对应。
其次,按照你的数据库表定义一个 Java 实体。
第三步,直接将该 JSON 字符串转换为 第二步的 Java 实体,操作实体 DAO 完成入库。

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

使用方法

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

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

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

我的理解,将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())

首先导入核心包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的,取到值以后 循环插入数据库即可,简单粗暴,但是建议用其它的多条数据插入方式,一般框架上都有。你自己选择。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐