JSON字符串和对象之间的互相转换
1.JSON字符串里面有一个对象形式的,怎么把它取出来?
导入依赖:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
1.字符串如下所示:
string = {"code":0,"msg":null,"data":{"buildingId":"2e5fb739884249598d9849b12a153810","buildingCode":"54","frameNo":"54","buildingName":"54栋","floorTotal":null,"houseTotal":null,"unitTotal":5,"unitNameType":"1","buildingArea":null,"buildingEra":null,"buildingType":null,"group4":null,"group5":null,"group6":null,"group7":null,"lon":null,"lat":null,"alt":null,"gisArea":null,"gisType":null,"regionId":"47ddf2a3769c40e5acf57b27659a8360","staffId":null,"provinceCode":null,"cityCode":null,"countyCode":null,"streetCode":null,"addressCode":"350622","address":null,"floorGround":null,"floorUnderground":null,"liveUnderground":null,"picUrl1":null,"picUrl2":null,"picUrl3":null},"reqId":"1597467285910589440"}
2.很明显data里面的数据是我们想要转的实体类,我们需要定义一个实体类,字段和里面的字段一一对应,到时候就可以自动赋值,当然不需要的字段可以不用写在实体类里面
实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BuildEntity {
private String buildingId;
private String buildingCode;
private String frameNo;
private String buildingName;
private String floorTotal;
private String houseTotal;
}
转化:
JSONObject jsonObject = JSONObject.parseObject(string); //string是要转化的json字符串 JSONObject为fastjson包里面
String body = jsonObject.getString("data"); //得到json字符里面的data对应的字符串
BuildEntity buildEntity = JSONUtil.toBean(body, BuildEntity.class); //成功转化 JSONUtil为hutool包里面的
2.JSON字符串里面包含了一个数组形式的对象,怎么把它取出来?
1.json字符串如下所示,List里面的数组是我们想要转化的字符串,但是他被包在里面了,怎么取出来呢?:
message = {"Body":{"Total":40,"Pages":1,"StartIndex":1,"Count":40,"List":[{"UnitInfoCode":"","BuildingInfoCode":"","HouseInfoCode":"","FrameNo":"01010101","AddressCode":"","AddressName":"","DataSource":"万科云城","DataState":"1","HouseCode":"","HouseStyle":"1","UpdateTime":"20220223090633","IsImportantHouse":"","UUID":"056BCC39-1438-4B62-8054-5A98AB46062B","LevelNo":3,"ParentLevelNo":2,"ParentNo":"0101","IsCancel":false,"Name":"0101房","Square":0.00},{"UnitInfoCode":"","BuildingInfoCode":"","HouseInfoCode":"","FrameNo":"01010102","AddressCode":"","AddressName":"","DataSource":"万科云城","DataState":"1","HouseCode":"","HouseStyle":"1","UpdateTime":"20221201112140","IsImportantHouse":"","UUID":"5B700D22-104D-4E5F-9FF6-42F74A41527E","LevelNo":3,"ParentLevelNo":2,"ParentNo":"0101","IsCancel":false,"Name":"0102房","Square":0.0}]},"Result":0,"Message":"操作成功"}
2.同样需要一个实体类接收,这个实体类对应数组里面的一个实体类
@AllArgsConstructor
@NoArgsConstructor
@Data
public class HouseEntity {
private String UnitInfoCode;
private String BuildingInfoCode;
private String HouseInfoCode;
private String FrameNo;
private String AddressCode;
private String AddressName;
private String DataSource;
private String DataState;
private String HouseCode;
private String HouseStyle;
private String UpdateTime;
private String IsImportantHouse;
private String UUID;
private String LevelNo;
private String ParentLevelNo;
private String ParentNo;
private String IsCancel;
private String Name;
private String Square;
}
3.转换:
JSONObject jsonObject = JSONObject.parseObject(message); //message要转化的字符串 JSONObject为fastjson包里面
String body = jsonObject.getString("Body"); //要一层一层的,先拿到Body字符串
JSONObject jsonObject1 = JSONObject.parseObject(body); //再把Body字符串转化为JSONObject对象
String list = jsonObject1.getString("List"); //再把Body里面的list字符串拿出来
List<HouseEntity> unitsEntities = JSONObject.parseArray(list, HouseEntity.class); //把list字符串转化为HouseEntity类型的数组
Iterator<HouseEntity> iterator = unitsEntities.iterator(); //迭代器遍历打印
while (iterator.hasNext()){
HouseEntity entity = iterator.next();
System.out.println("next = " + entity);
}
//也可以这样:
JSONObject jsonObject = JSONObject.parseObject(message);
JSONObject data = jsonObject.getJSONObject("Body");
JSONArray jsonArray = data.getJSONArray("List"); //可以直接拿到里面的数组字符串
List<HouseEntity> entities = JSONObject.parseArray(JSON.toJSONString(jsonArray), HouseEntity.class);
Iterator<HouseEntity> iterator = entities.iterator();
while (iterator.hasNext()){
HouseEntity entity = iterator.next();
System.out.println("entity = " + entity);
}