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数据库表
首先, 你需要设计你的数据库表,怎么跟这个 JSON 数据对应起来,数组类型的属性怎么跟数据库字段对应。
其次,按照你的数据库表定义一个 Java 实体。
第三步,直接将该 JSON 字符串转换为 第二步的 Java 实体,操作实体 DAO 完成入库。
实体类:http://note.youdao.com/noteshare?id=a86d7e1aabfc4a713e52d29dd03ce015
使用方法
List<MyBean> temp= JSON.parseObject(fastjson,MyBean.class);
第一步,首先定义个符合返回数据的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的,取到值以后 循环插入数据库即可,简单粗暴,但是建议用其它的多条数据插入方式,一般框架上都有。你自己选择。