如何将JSON数组转换为ArrayList?

时间:2018-04-20 22:57:07

标签: 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, 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);
}

当我尝试运行该函数时出现此错误。

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 3 path $[0]

2 个答案:

答案 0 :(得分:1)

这是因为您尝试创建.js ArrayList,但您有JJ中的OBJECTS,而不是字符串。尝试更改此行:

String

对于这样的事情:

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

假设Type listType = new TypeToken<ArrayList<ChatMessage>>() {}.getType(); 知道如何反序列化您的Gson类,那应该会有效。

答案 1 :(得分:0)

  1. 您的数据库字符串最后缺少JSON数组结束括号]

  2. gson类型参数错误。您需要ArrayList<ChatMessage>,但使用了ArrayList<String>

  3. 替换

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

    使用

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