Java gson,有关解码为Map< String,String []>的ClassCastException; [英] Java gson, ClassCastException on decoding to Map<String,String[]>

查看:43
本文介绍了Java gson,有关解码为Map< String,String []>的ClassCastException;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将 {"username":["emmet"]} 之类的json字符串解码为 Map< String,String []> 对象./p>

使用以下代码:

 字符串json ="{\"用户名\:[\" 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(用户名");System.out.println(val); 

发生此异常:

 线程主"中的异常java.lang.ClassCastException:无法将java.util.ArrayList强制转换为[Ljava.lang.String;在com.company.Main.main(Main.java:16)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:601)在com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Gson已将我的对象解码为 Map< String,ArrayList< String>> 对象,而不是 Map< String,String []> 对象.如何强制gson将对象解码为 Array 而不是 ArrayList ?

我正在使用 gson-2.8.1 .

解决方案

Gson json 数组转换为Java List 试图以 String [] 的用户名获得 ClassCastException

如果要以 String [] 的形式获取它,请按照以下方式使用:

 字符串json ="{\"用户名\:[\" 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>用户名= map.get(用户名");String [] val = usernames.toArray(new String [0]);System.out.println(val); 

那对你有用

I want to decode a json string like {"username":["emmet"]} to a Map<String,String[]> object.

using following code:

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

this exception occurs:

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 has decoded my object as a Map<String, ArrayList<String>> object instead of Map<String,String[]> object. How can I force gson to decode my object as Array not ArrayList?

I'm using gson-2.8.1.

解决方案

Gson converts json array to a java List, so when you trying to get the usernames as String[] you getting an ClassCastException

If you want to get it as a String[] use it that way :

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

That will work for you

这篇关于Java gson,有关解码为Map&lt; String,String []&gt;的ClassCastException;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆