【问题标题】:parsing json with Gson java使用 Gson java 解析 json
【发布时间】:2012-07-05 09:35:20
【问题描述】:

我在使用 Gson 解析 json 时遇到问题。 这是我的代码:

Gson gson = new GsonBuilder().create();
String json = gson.toJson(myMap.values());
MyClass clazz = gson.fromJson(json, MyClass.class);
System.out.println(clazz.toString());

但是我得到了下一个错误(我也尝试了新的 TypeToken,但错误是一样的):

com.google.gson.JsonParseException: The JsonDeserializer MapTypeAdapter failed to deserialized json object /*here is json object*/

Caused by: java.lang.IllegalArgumentException: Map objects need to be parameterized unless you use a custom serializer. Use the com.google.gson.reflect.TypeToken to extract the ParameterizedType.
    at com.google.gson.TypeInfoMap.<init>(TypeInfoMap.java:45)
    at com.google.gson.DefaultTypeAdapters$MapTypeAdapter.deserialize(DefaultTypeAdapters.java:605)
    at com.google.gson.DefaultTypeAdapters$MapTypeAdapter.deserialize(DefaultTypeAdapters.java:573)
    at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:50)

这里是获取的json字符串,是有效的(但可能我应该删除“items”子字符串?):

["{\n 
    \"items\": 
        [
        \n  {
        \n \"MyClass_type_var1\": {
        \n    \"field1\": \"val1\",
        \n    \"field2\": \"val2\",
        \n    \"field3\": [
                        \n     {
                        \n      \"subfield1\": subval
                        \n     }
                        \n    ]
                        \n   }
                        \n  },
        \n \"MyClass_type_var2\": {
        \n    \"field1\": \"val1\",
        \n    \"field2\": \"val2\",
        \n    \"field3\": [
                        \n     {
                        \n      \"subfield1\": subval
                        \n     }
                        \n    ]
                        \n   }
                        \n  },
        \n \"MyClass_type_var3\": {
        \n    \"field1\": \"val1\",
        \n    \"field2\": \"val2\",
        \n    \"field3\": [
                        \n     {
                        \n      \"subfield1\": subval
                        \n     }
                        \n    ]
                        \n   }
                        \n  },


etc......   may I haven't closed brackets correctly, but they are correct :)                
            }           
        ]               
    "]                  

如果有任何建议,我将不胜感激。

public final class MyClass extends GenericJson {

  private String field1;
  private String field2;
  private java.util.List<AClass> field3; // has subfield1
//getters and setters
}

单行json:

["{\n \"items\": [ \n  { \n \"MyClass\": { \n    \"field1\": \"val1\", \n    \"field2\": \"val2\", \n    \"field2\": [ \n  { \n \"subfield1\": subval   \n } \n    ] \n   } \n  }, \n \"MyClass\": { \n    \"field1\": \"val1\", \n    \"field2\": \"val2\", \n    \"field2\": [ \n     {  \n      \"subfield1\": subval \n     } \n    ] \n   } \n  }, \n \"MyClass\": {\n   \"field1\":\"val1\", \n    \"field2\": \"val2\", \n    \"field2\": [ \n     { \n      \"subfield1\": subval \n     } \n    ] \n   } \n  }, }          ]   "]

【问题讨论】:

  • 你能在一行中发布 json 以便我可以通过在线工具解析它吗?我会让你成为一个新的 MyClass

标签: java json gson


【解决方案1】:

here 我尝试使用jackon,但没有帮助。查看该问题的答案(使用我自己的解析器)。

【讨论】:

    【解决方案2】:

    试试这样的:

    我的班级:

    import java.util.List;
    
    public class MyClass {
    
        public List<Item> items;
    
        public static class Item{
    
            public List<innerData> MyClass_type_var1;
            public List<innerData> MyClass_type_var2;
            public List<innerData> MyClass_type_var3;
    
            public static class innerData{
                public String field1;
                public String field2;
                public List<String> field3;
            }       
        }   
    }
    
    MyClass cls = new Gson().fromJSon(json, MyClass.class);
    

    希望这将引导您朝着正确的方向前进:-)

    编辑:

    试试这个

    public class NewClass{
        public List<MyClass> items;
    }
    
    NewClass cls = new Gson().fromJSon(json, NewClass.class);
    

    【讨论】:

    • 我无法更改 MyClass,因为我从第三方库中使用它,但我可以生成自己的。都一样,谢谢你的想法。
    • com.google.gson.JsonParseException: 期望数组但找到对象
    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2013-05-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多