首页 > 解决方案 > 无法将 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 将是这样的:

我尝试了其他方法来从 JSON 字符串中获取值,并且它们不断给出 JSONException。gson.fromJson(jsonString, MyObject.class)不起作用的原因可能是因为 ProGuard 混淆使 MyObject 的变量名称与 JSON 字符串中的变量名称不同。如何将此字符串转换为其原始形式的 MyObject?

标签: javaandroid

解决方案


如果您是正确的并且存在混淆,那么您可以注册自己的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); 

推荐阅读