使用Gson库,如何将JSON字符串转换为自定义类ArrayList
的{{1}}?基本上,JsonLog
是由我的Android应用程序制作的不同类型的日志实现的接口 - 短信日志,呼叫日志,数据日志 - 这个JsonLog
是所有日志的集合。我在第6行继续收到错误。
ArrayList
似乎编译器不理解我指的是键入的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
}
}
。我该怎么办?
答案 0 :(得分:447)
您可以使用TypeToken将json字符串加载到自定义对象中。
logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
答案 1 :(得分:23)
您的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-将其保存在共享的优先级中
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 Library。
答案 2 :(得分:5)
科特琳
data class Player(val name : String, val surname: String)
val json = [
{
"name": "name 1",
"surname": "surname 1"
},
{
"name": "name 2",
"surname": "surname 2"
},
{
"name": "name 3",
"surname": "surname 3"
}
]
val typeToken = object : TypeToken<List<Player>>() {}.type
val playerArray = Gson().fromJson<List<Player>>(json, typeToken)
OR
val playerArray = Gson().fromJson(json, Array<Player>::class.java)
答案 3 :(得分:5)
为什么没人写这种在列表中转换JSON字符串的简单方法?
int16_t
答案 4 :(得分:1)
我不确定gson,但这是您使用Jon的方法。sample希望使用gson必须有类似的方法
{ “玩家”:[ “玩家1”, “玩家2”, “玩家3”, “玩家4”, “玩家5” ] }
================================================
import java.io.FileReader;
import java.util.List;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class JosnFileDemo {
public static void main(String[] args) throws Exception
{
String jsonfile ="fileloaction/fileName.json";
FileReader reader = null;
JSONObject jsb = null;
try {
reader = new FileReader(jsonfile);
JSONParser jsonParser = new JSONParser();
jsb = (JSONObject) jsonParser.parse(reader);
} catch (Exception e) {
throw new Exception(e);
} finally {
if (reader != null)
reader.close();
}
List<String> Players=(List<String>) jsb.get("Players");
for (String player : Players) {
System.out.println(player);
}
}
}
答案 5 :(得分:1)
如果要使用数组,这很简单。
logs = gson.fromJson(br, JsonLog[].class); // line 6
将JsonLog
提供为数组JsonLog[].class
答案 6 :(得分:0)
您有这样的字符串。
"[{"id":2550,"cityName":"Langkawi","hotelName":"favehotel Cenang Beach - Langkawi","hotelId":"H1266070"},
{"id":2551,"cityName":"Kuala Lumpur","hotelName":"Metro Hotel Bukit Bintang","hotelId":"H835758"}]"
然后,您可以像
一样通过 Gson 将其隐藏到 ArrayList
var hotels = Gson().fromJson(historyItem.hotels, Array<HotelInfo>::class.java).toList()
您的 HotelInfo 类应该喜欢这个。
import com.squareup.moshi.Json
data class HotelInfo(
@Json(name="cityName")
val cityName: String? = null,
@Json(name="id")
val id: Int? = null,
@Json(name="hotelId")
val hotelId: String? = null,
@Json(name="hotelName")
val hotelName: String? = null
)
答案 7 :(得分:0)
如果要从Json转换为类型化的ArrayList,则指定列表中包含的对象的类型是错误的。正确的语法如下:
| | a | b1 | b2 | b3 | c1 | c2 | c3 |
|---:|:----|:------------|:--------------|:---------------|:------------|:--------------|:---------------|
| 0 | jon | ('age', 12) | ('gender', 1) | ('marital', 1) | ('age', 12) | ('gender', 1) | ('marital', 1) |
| 1 | san | ('age', 34) | ('gender', 1) | ('marital', 2) | ('age', 34) | ('gender', 1) | ('marital', 2) |
| 2 | el | ('age', 14) | ('gender', 2) | ('marital', 1) | ('age', 14) | | |
答案 8 :(得分:0)
val userList = Gson().fromJson(mList, Array< User >::class.java).toList()
Gson gson = new Gson();
Type userListType = new TypeToken<ArrayList<User>>(){}.getType();
ArrayList<User> userArray = gson.fromJson(userJson, userListType);