簡體   English   中英

用Gson Java解析json

[英]parsing json with Gson java

使用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  }, }          ]   "]

在這里,我嘗試使用jackon,但沒有幫助。 查看該問題的答案(使用我自己的解析器)。

嘗試這樣的事情:

我的課:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM