java - 无法将 JSON 字符串转换为对象?
问题描述
我已经在这个问题上停留了 3 天。
假设我有一个这样的 JSON 字符串{"a": 0, "b": true, "c": 25, "d": 4.0, "e": false}
。
我尝试用这个方法把它变成一个对象:
Gson gson = new Gson();
MyObject myObject = gson.fromJson(jsonString, MyObject.class);
这将返回一个空对象。这意味着 myObject 将是这样的:
- a 为 0
- b 是假的
- c 为 0
- d 为 0.0
- e 是假的
我尝试了其他方法来从 JSON 字符串中获取值,并且它们不断给出 JSONException。gson.fromJson(jsonString, MyObject.class)
不起作用的原因可能是因为 ProGuard 混淆使 MyObject 的变量名称与 JSON 字符串中的变量名称不同。如何将此字符串转换为其原始形式的 MyObject?
解决方案
如果您是正确的并且存在混淆,那么您可以注册自己的JsonDeserializer
. 这是一个简单的例子来说明如何做到这一点。首先,你必须实现它
JsonDeserializer<MyObject> deserializer = new JsonDeserializer<MyObject>() {
@Override
public UserDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
MyObject myObject = new MyObject();
// Write the actual deserialization logic for MyObject class here
return myObject;
}
};
然后你必须注册它。
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyObject.class, deserializer);
Gson customGson = gsonBuilder.create();
MyObject myObject = customGson.fromJson(myObject, MyObject.class);
推荐阅读
- php - Codeigniter SaaS 应用程序 - cli cron 作业上的动态数据库选择
- html - 将div的高度设置为父div的底部
- r - 使用带有 JDBC 驱动程序的 R dbGetQuery 函数的多线程
- blazor - Blazor 中是否有与 Html.Raw 等效的内容?
- reactjs - 为什么我从 Marvel API 收到 InvalidCredentials 错误?
- sql - 显示员工姓名、休假、合格休假和百分比的查询
- git - 恢复未提交的隐藏更改
- google-apps-script - 如何使用谷歌应用脚本从谷歌表格中的列中提取具有相应值的唯一数据?
- java - appium webdriver remoteserver UnreachableBrowserException
- .net - 使用 iTextSharp 7 和智能卡对 PDF 文档进行 PAdeS 数字签名