无法使用 Gson 将包含嵌套 json 数组的 json 转换为等效的 JAVA 类

Posted

技术标签:

【中文标题】无法使用 Gson 将包含嵌套 json 数组的 json 转换为等效的 JAVA 类【英文标题】:Unable to convert a json containing nested json arrays to an equivalent JAVA class using Gson 【发布时间】:2021-12-17 12:44:06 【问题描述】:

使用的 JSON 字符串:

'"Sensors":[\"name\":\"BLRB50CM_A\",\"cameraId\":\"Cam10\",\"id\":1,\"resolution\":\"1280 x 720\",\"officeLocation\":\"Offshore Development Center\",\"tags\":\"Entrance Camera, Parking Lot\",\"isActive\":\"true\",\"hls\":\"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8\",\"rtsp\":\"rtsp://10.66.102.66:32278/mystream/parking_lot\",\"type\":\"sensor\",\"inputs\":[],\"outputs\":[2]]'

java pojo 类:

public class ServiceFlowData 

    public ArrayList<Sensor> sensors;
    
    public ArrayList<Sensor> getSensors() 
        return sensors;
    

    public void setSensors(ArrayList<Sensor> sensors) 
        this.sensors = sensors;
    
 

用于转换为 java 对象的代码

Gson gson = new Gson();
ServiceFlowData serviceFlowData = gson.fromJson(jsonString,ServiceFlowData.class);
System.out.println("serviceFlowData"+serviceFlowData.getSensors());

我将获取传感器设为空。

我在这里错过了什么..?

【问题讨论】:

你可以使用这个链接:***.com/questions/55533093/… 类必须具有与您要映射的 JSON 中相同的变量,并且它们区分大小写! 【参考方案1】:

您的 json 键是 Sensors 而不是 sensors

解决方案 1

尝试改变

public ArrayList<Sensor> sensors;

public ArrayList<Sensor> Sensors;

解决方案 2

您可以使用@SerializedName注解将json键映射到具有不同名称的java变量。

【讨论】:

这样做是个坏主意。 Gson 有一种特殊的方法可以将代码保留为 Java 代码约定。 @fluffy 更新了替代方案的答案。

以上是关于无法使用 Gson 将包含嵌套 json 数组的 json 转换为等效的 JAVA 类的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上通过 GSON 从嵌套 JSON 数组中获取价值? [复制]

使用gson解析怎么将json字符串解析为数组

由于嵌套 bean,无法在 playframework 中使用 GSON 解析 JSON

android使用gson解析嵌套复杂的json数据,数据怎么显示到布局上,布局怎么写

gson 怎么处理 json数组字符串转list对象

gson怎么解析数组和空数组?