JSON字符串和对象、对象数组的转换

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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值