栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

GSON:JSON反序列化为变量类型(列表/字符串)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GSON:JSON反序列化为变量类型(列表/字符串)

如果您一直有,

object
或者
one-element array
可以编写自定义反序列化器,如下所示:

class OneOrElementJsonDeserializer<T> implements JsonDeserializer<T> {    @Override    public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {        if (json instanceof JsonArray) { final JsonArray array = (JsonArray) json; final int size = array.size(); if (size == 0) {     return null; } return context.deserialize(array.get(0), typeOfT);        }        return context.deserialize(json, typeOfT);    }}

简化后的示例模型如下所示:

class User {    @JsonAdapter(OneOrElementJsonDeserializer.class)    private Data data;    public User() {    }    public User(Data data) {        super();        this.data = data;    }    public Data getData() {        return data;    }    public void setData(Data data) {        this.data = data;    }    @Override    public String toString() {        return "User{" +     "data=" + data +     '}';    }}class Data {    private String id;    protected String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    @Override    public String toString() {        return "Data{" +     "id='" + id + ''' +     '}';    }}

用法示例:

import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.JsonArray;import com.google.gson.JsonDeserializationContext;import com.google.gson.JsonDeserializer;import com.google.gson.JsonElement;import com.google.gson.JsonParseException;import com.google.gson.annotations.JsonAdapter;import java.io.File;import java.io.FileReader;import java.lang.reflect.Type;public class GsonApp {    public static void main(String[] args) throws Exception {        File jsonFile = new File("./resource/test.json").getAbsoluteFile();        Gson gson = new GsonBuilder()     .setPrettyPrinting()     .create();        User root = gson.fromJson(new FileReader(jsonFile), User.class);        System.out.println(root);    }}

上面的代码用于下面的

JSON
有效负载:

{  "data": [    {      "id": "c87ca3fe85781007869b83f"    }  ]}

印刷品:

User{data=Data{id='c87ca3fe85781007869b83f'}}

而对于

object
案件
JSON
的有效载荷:

{  "data": {    "id": "c87ca3fe85781007869b83f"  }}

印刷品:

User{data=Data{id='c87ca3fe85781007869b83f'}}

如果您的媒体资源可以包含

JSON object
multi-elementarray
看到我对此问题的回答(将Json数组映射到Java模型)。实现了反序列化程序,可以处理这种情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号