友情提示:
此方法利用的是阿里的fastjson,请注意使用前引用
不使用对象直接对字符串进行操作,请前往本文文末连接;
项目场景:
之前写过一篇关于Java对json字符串的处理.当时想着偷个懒,直接获取;后来发现;当使用频率较多的时候,就不太方便了. 咱们都是学过面向对象的,这里都已经告诉咱们的了,面向对象嘛!既然是面向对象编程 那就向json的数据转化为对象呗处理思路:
- 需要根据接收的json对象构建对象,
- 将你所有需要的数据全部封装未对象!
- 再利用阿里(fastjson) /google(Gson)的 json转对象的方法
- 直接转为对象,再直接操作对象
假设以下是我们接收到的json,我们需要的是detail
中的数据;
则需要构建实体dataItems
以及包含dataItems
的实体;
然后直接进行转换;
示例代码:
- dataItems实体(假设都是String类型)
public class DataIteams {
private String phoneNum;
private String aramDateTime;
private String aramType;
private String lon;
private String lat;
private String devNo;
private String descripton;
private String since;
private String amc;
@Override
public String toString() {
return "DataIteams{" +
"phoneNum='" + phoneNum + '\'' +
", aramDateTime='" + aramDateTime + '\'' +
", aramType='" + aramType + '\'' +
", lon='" + lon + '\'' +
", lat='" + lat + '\'' +
", devNo='" + devNo + '\'' +
", descripton='" + descripton + '\'' +
", since='" + since + '\'' +
", amc='" + amc + '\'' +
'}';
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getAramDateTime() {
return aramDateTime;
}
public void setAramDateTime(String aramDateTime) {
this.aramDateTime = aramDateTime;
}
public String getAramType() {
return aramType;
}
public void setAramType(String aramType) {
this.aramType = aramType;
}
public String getLon() {
return lon;
}
public void setLon(String lon) {
this.lon = lon;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getDevNo() {
return devNo;
}
public void setDevNo(String devNo) {
this.devNo = devNo;
}
public String getDescripton() {
return descripton;
}
public void setDescripton(String descripton) {
this.descripton = descripton;
}
public String getSince() {
return since;
}
public void setSince(String since) {
this.since = since;
}
public String getAmc() {
return amc;
}
public void setAmc(String amc) {
this.amc = amc;
}
}
- detail的实体
import java.util.List;
public class Detail {
private String pageCount;
private String totalCount;
private String pageIndex;
private String pageSize;
/**
*这个实体就是DataItems里面的数据体
*/
private List<DataItems> dataItems;
@Override
public String toString() {
return "Detail{" +
"pageCount='" + pageCount + '\'' +
", totalCount='" + totalCount + '\'' +
", pageIndex='" + pageIndex + '\'' +
", pageSize='" + pageSize + '\'' +
", dataItems=" + dataItems +
'}';
}
public String getPageCount() {
return pageCount;
}
public void setPageCount(String pageCount) {
this.pageCount = pageCount;
}
public String getTotalCount() {
return totalCount;
}
public void setTotalCount(String totalCount) {
this.totalCount = totalCount;
}
public String getPageIndex() {
return pageIndex;
}
public void setPageIndex(String pageIndex) {
this.pageIndex = pageIndex;
}
public String getPageSize() {
return pageSize;
}
public void setPageSize(String pageSize) {
this.pageSize = pageSize;
}
public List<DataItems> getDataItems() {
return dataItems;
}
public void setDataItems(List<DataItems> dataItems) {
this.dataItems = dataItems;
}
}
当构建了实体以后就可以直接利用方法转换了!
示例代码代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
String str = "{\n" +
" \"code\": \"0\",\n" +
" \"error\": \"\",\n" +
" \"msg\": \"success\",\n" +
" \"detail\": {\n" +
" \"pageCount\": 1,\n" +
" \"totalCount\": 9,\n" +
" \"pageIndex\": 1,\n" +
" \"pageSize\": 1000,\n" +
" \"dataItems\": [\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990185000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224438,\n" +
" \"lat\": 30.55706,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990186000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224457,\n" +
" \"lat\": 30.557187,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990190000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224484,\n" +
" \"lat\": 30.557565,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990195000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224434,\n" +
" \"lat\": 30.557971,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990196000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224388,\n" +
" \"lat\": 30.558073,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990200000,\n" +
" \"aramType\": 1,\n" +
" \"lon\": 114.224297,\n" +
" \"lat\": 30.558436,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1614736039000,\n" +
" \"aramType\": 27,\n" +
" \"lon\": 114.204813,\n" +
" \"lat\": 30.553443,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1615342530000,\n" +
" \"aramType\": 27,\n" +
" \"lon\": 114.216378,\n" +
" \"lat\": 30.561051,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" },\n" +
" {\n" +
" \"phoneNum\": \"027044039989\",\n" +
" \"aramDateTime\": 1616990178000,\n" +
" \"aramType\": 27,\n" +
" \"lon\": 114.222609,\n" +
" \"lat\": 30.554516,\n" +
" \"devNo\": \"\",\n" +
" \"descripton\": \"\",\n" +
" \"since\": \"\",\n" +
" \"amc\": \"\"\n" +
" }\n" +
" ]\n" +
" },\n" +
"}";
//先转换成JSONObject类型
String json = JSON.parseObject(str).getString("detail");
Detail detail = JSONObject.parseObject(json, Detail.class);
System.out.println(detail);
}
}
运行的结果:
获得的detail对象就可以直接使用get和set方法获取数据了
附上方法:
//Javabean对象转换成String类型的JSON字符串
JSONObject.toJSONString(Javabean对象)
//String类型的JSON字符串转换成Javabean对象
JSONObject.toJavaObject(JSON字符串,Javabean.class)
//Json字符串转换成JSONObject对象
JSONObject.parseObject(JSON字符串)
//JSON字符串转换成Javabean对象
JSONObject.parseObject(JSON字符串,Javabean.class)
不想用对象的形式,这里有直接使用操作json对象的的方法!.