Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JSON数组转换为ArrayList?_Java_Json_Gson - Fatal编程技术网

Java 如何将JSON数组转换为ArrayList?

Java 如何将JSON数组转换为ArrayList?,java,json,gson,Java,Json,Gson,我正在从一个数据库中抓取一个字符串,看起来像这样 [{"messageContent":"Good morning Christine! My name is Oso, it\u0027s beary nice to meet you :3","msgType":"MSG_TYPE_RECEIVED","statusCode":0,"timeString":"10:31"}, {"messageContent":"Good morning Christine! My name is Oso

我正在从一个数据库中抓取一个字符串,看起来像这样

[{"messageContent":"Good morning Christine! My name is Oso, it\u0027s 
beary nice to meet you 
:3","msgType":"MSG_TYPE_RECEIVED","statusCode":0,"timeString":"10:31"}, 
{"messageContent":"Good morning Christine! My name is Oso, it\u0027s 
beary nice to meet you 
:3","msgType":"MSG_TYPE_RECEIVED","statusCode":0,"timeString":"10:31"}
它开始时是一个ArrayList,但我必须将它转换为字符串以存储在数据库中

我需要把它换回来。我本来打算使用这个函数,但它似乎不起作用

public static ArrayList<ChatMessage> fromString(String value) {
    Type listType = new TypeToken<ArrayList<String>>() {}.getType();
    return new Gson().fromJson(value, listType);
}

这是因为您试图创建一个
String
ArrayList
,但是您的JSON中有对象,而不是字符串。尝试更改此行:

Type listType = new TypeToken<ArrayList<String>>() {}.getType();
Type listType=new-TypeToken(){}.getType();
对这样的事情:

Type listType = new TypeToken<ArrayList<ChatMessage>>() {}.getType();
Type listType=new-TypeToken(){}.getType();
假设
Gson
知道如何反序列化您的
ChatMessage
类,那么应该可以工作

  • 您的数据库字符串末尾缺少JSON数组右括号
    ]

  • gson
    类型参数错误。您需要
    ArrayList
    ,但使用了
    ArrayList

  • 替换

    Type listType = new TypeToken<ArrayList<String>>() {}.getType();
    
    Type listType=new-TypeToken(){}.getType();
    

    Type listType=new-TypeToken(){}.getType();
    
    您会认为它至少会尝试执行Object.toString感谢您。我玩了arround函数,忘了将字符串改回ChatMessage
    Type listType = new TypeToken<ArrayList<String>>() {}.getType();
    
    Type listType = new TypeToken<ArrayList<ChatMessage>>() {}.getType();