我从一个看起来像这样的数据库中抓取一个字符串
[{"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]
答案 0 :(得分:1)
这是因为您尝试创建.js
ArrayList
,但您有JJ中的OBJECTS,而不是字符串。尝试更改此行:
String
对于这样的事情:
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
假设Type listType = new TypeToken<ArrayList<ChatMessage>>() {}.getType();
知道如何反序列化您的Gson
类,那应该会有效。
答案 1 :(得分:0)
您的数据库字符串最后缺少JSON数组结束括号]
。
gson
类型参数错误。您需要ArrayList<ChatMessage>
,但使用了ArrayList<String>
。
替换
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
使用
Type listType = new TypeToken<ArrayList<ChatMessage>>() {}.getType();