【问题标题】:Gson crash at fromJson methodGson 在 fromJson 方法处崩溃
【发布时间】:2016-02-04 11:36:28
【问题描述】:

我正在尝试将一个简单的 JSONObject 转换为字符串,但不断出现崩溃。

classStr = (Class<T>) String.class;
Gson gson = new Gson();
dataObject = gson.fromJson( obj, classStr );

obj 是 --> { "myData" : "1234" }.
** 当 obj 只是一个字符串时(“myDate:1234”)它可以工作。

【问题讨论】:

    标签: java android json gson jsonobject


    【解决方案1】:

    以下代码用于将 Java 或 Json 对象转换为 GsonString:

    //Here Object may b collection object or any other java object
    public String convertToGsonString(Object obj) {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }
    

    将 gsonString 转换为 Object:

     public Object convertFromGson(String gsonString) {
    
        Gson gson = new Gson();
        Type type = new TypeToken<Object>() {
        }.getType();
        return gson.fromJson(gsonString, type);
    }
    

    例如,这里将 Object 视为 HashMap:

    public String convertToGsonString(HashMap<String,String> obj) {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }
    

    从 GsonString 转换为 HashMap:

    public HashMap<String,String> convertFromGson(String gsonString) {
    
      Gson gson = new Gson();
      Type type = new TypeToken<HashMap<String,String>>() {
      }.getType();
      return gson.fromJson(gsonString, type);
    }
    

    【讨论】:

    • 谢谢。我可以使用 HashMap 但使用 Class 而不是 Type in fromJson 方法吗?
    • Map&lt;String,String&gt; map = new HashMap&lt;String,String&gt;(); and then (Class&lt;T&gt;) map.getClass(); 这是我一直在寻找的解决方案,但你的“类型”也很好。
    【解决方案2】:

    创建一个模型类。

    Class DataObject {
    public String myData;
    }
    

    然后使用此代码。

    Gson gson = new Gson();
    DataObject dataObject = gson.fromJson(obj, DataObject.class);
    

    【讨论】:

    • 谢谢。有没有办法避免为此创建自定义类?可以通过 HashMap 实现吗?所以 dataObject 会有 Key (String) = "myData" 和 Value (String) = "1234" ?
    • 欢迎您。是的,您可以,只需从 JSONObject 中提取字符串值,然后使用键 myData 将其放入 HashMap。 @BVtp
    • 你的意思是在obj上调用toString,然后放到HashMap中?我将如何分离键和值?我可能误解了你..再次感谢
    【解决方案3】:

    使用下面的代码:

    Gson gson = new Gson();

    DataObject dataObject = gson.fromJson(obj, DataObject.class);

    因为 Gson fromJson 方法的签名是:

    public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
    

    这里返回的是类类型T的对象,所以不要使用String.class(类类型不匹配)使用dataObject实例的类,否则会抛出JsonSyntaxException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多