2017-12-19 16 views
1

のようなjsonストリングをMap<String,String[]>オブジェクトにデコードしたいとします。Java gson、ClassCastExceptionがMap <String、String []>へのデコード時

次のコードを使用して:

String json = "{\"username\":[\"emmet\"]}"; 
    Gson gson = new GsonBuilder().create(); 
    Map<String,String[]> map = new HashMap<>(); 
    map = (Map<String,String[]>)gson.fromJson(json, map.getClass()); 
    String[] val = map.get("username"); 
    System.out.println(val); 

この例外が発生します。

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.lang.String; 
    at com.company.Main.main(Main.java:16) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Gson代わりMap<String,String[]>オブジェクトのMap<String, ArrayList<String>>目的として私のオブジェクトを復号化しています。 gsonにオブジェクトのデコードをArrayではなく、ArrayListとするにはどうすればよいですか?

私はgson-2.8.1を使用しています。

答えて

3

Gsonは、java Listjson配列を変換するので、あなたはString[]ば使うほどそのようにそれを取得したい場合は、ClassCastException

を取得String[]としてユーザ名を取得しようとしたとき:

String json = "{\"username\":[\"emmet\"]}"; 
    Gson gson = new GsonBuilder().create(); 
    Map<String,List<String>> map = new HashMap<>(); 
    map = (Map<String,List<String>>)gson.fromJson(json, map.getClass()); 
    List<String> usernames = map.get("username"); 
    String[] val = usernames.toArray(new String[0]); 
    System.out.println(val); 

それはあなたのために働くでしょう

-1

すべてを解析してマップに手動で置くことができます。あなたがこれを行う方法を示すコードがあります。

String jsonString = "{\"username\":[\"emmet\"]}"; 
JsonParser jsonParser = new JsonParser(); 
JsonObject jsonObject = jsonParser.parse(jsonString).getAsJsonObject(); 
Set<String> keys = jsonObject.keySet(); 
Map<String, String[]> map = new HashMap<>(); 
for(String key:keys){ 
    JsonElement jsonElement = jsonObject.get(key); 
    if(jsonElement.isJsonArray()){ 
     JsonArray jsonArray = jsonElement.getAsJsonArray(); 
     String[] strings = new String[jsonArray.size()]; 
     for(int i = 0; i < jsonArray.size(); i++){ 
      strings[i] = jsonArray.get(i).getAsString(); 
     } 
     map.put(key, strings); 
    } else { 
     //Handle other instances such as JsonObject, JsonNull, and JsonPrimitive 
    } 
} 
関連する問題