使用Gson库,如何将JSON字符串转换为自定义类JSONLOG
的ArrayList
?基本上,jsonlog
是由我的Android应用程序创建的不同类型的日志实现的接口--SMS日志、呼叫日志、数据日志--而这个ArrayList
是所有这些日志的集合。我在第6行总是发现一个错误。
public static void log(File destination, JsonLog log) {
Collection<JsonLog> logs = null;
if (destination.exists()) {
Gson gson = new Gson();
BufferedReader br = new BufferedReader(new FileReader(destination));
logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6
// logs.add(log);
// serialize "logs" again
}
}
似乎编译器不明白我指的是类型化的arraylist
。我该怎么办?
您的JSON示例是:
{
"status": "ok",
"comment": "",
"result": {
"id": 276,
"firstName": "mohamed",
"lastName": "hussien",
"players": [
"player 1",
"player 2",
"player 3",
"player 4",
"player 5"
]
}
因此,如果您想在SharedPrefrences中保存模块的arraylist,那么:
1-将使用此方法将返回的arraylist转换为json格式
public static String toJson(Object jsonObject) {
return new Gson().toJson(jsonObject);
}
2-将其保存在共享的prefreneces中
PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....)));
3-要在任何时候检索它,请从共享首选项中获取JsonString
String playersString= PreferencesUtils.getInstance(this).getString("players");
4-再次转换为数组列表
public static Object fromJson(String jsonString, Type type) {
return new Gson().fromJson(jsonString, type);
}
ArrayList<String> playersList= (ArrayList<String>) fromJson(playersString,
new TypeToken<ArrayList<String>>() {
}.getType());
如果您想要解析对象的ArrayList,这个解决方案也是可行的,希望通过使用Gson库对您有所帮助。
您可以使用TypeToken将json字符串加载到自定义对象中。
logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
文档:
表示泛型类型T。
Java还没有提供表示泛型类型的方法,所以这个类提供了。强制客户端创建该类的子类,从而即使在运行时也能检索类型信息。
例如,要为list
创建类型文字,可以创建一个空的匿名内部类:
TypeToken
>list=new TypeToken
>(){};
此语法不能用于创建具有通配符参数的类型文字,如class<?>
或list<?扩展charSequence>
。
科特林:
如果你需要在Kotlin做,你可以这样做:
val myType = object : TypeToken<List<JsonLong>>() {}.type
val logs = gson.fromJson<List<JsonLong>>(br, myType)
或者您可以看到各种备选方案的答案。
问题内容: 使用Gson库,如何将JSON字符串转换为自定义类的?基本上,这是一个由我的Android应用制作的各种日志(SMS日志,通话日志,数据日志)实现的界面,这是所有这些的集合。我在第6行中不断收到错误消息。 看来编译器无法理解我指的是typed 。我该怎么办? 问题答案: 您可以使用TypeToken将json字符串加载到自定义对象中。 说明文件: 表示泛型类型 牛逼 。 Java尚未提
我无法将JSON数组转换为数组。以下是我使用的JSON: 类为: 并且尝试以下代码会导致: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$ 代码:
问题内容: 我有一些奇怪的JSON,如: 基于某个字段,数组中的对象是某种类型。使用Gson,我的想法是要拥有一个TypeAdapterFactory,它将那些特定类型的委托适配器发送到TypeAdapter,但是我一直挂在理解读取“ type”字段以了解要创建哪种类型的一种好方法上。在TypeAdapter中 会假设“类型”字段在我的JSON中排在首位。有消除这种假设的不错方法吗? 问题答案:
问题内容: 目前,我正在使用带有webView前端的本机android应用程序。 我有类似的东西: 在活动中 我做了一个dataObject数组,比如dataObject x [5]; 现在,我想将这5个dataObject作为JSON的回调函数传递给我的javascript webView接口。 我浏览了互联网,似乎大多数教程都在谈论如何转换。没有太多关于。我找到了一个教会我的人,可以工作。 但
这是实际的
问题内容: 那是我的JSON数组,但我想将fruits字符串中的所有值转换为Python列表。正确的做法是什么? 问题答案: 您拥有了所需的一切。将是一个字典,将是一个列表