首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Gson -从Json转换为类型化的ArrayList<T>

Gson -从Json转换为类型化的ArrayList<T>
EN

Stack Overflow用户
提问于 2012-09-12 16:29:40
回答 4查看 253.2K关注 0票数 234

如何使用Gson库将JSON字符串转换为自定义类JsonLogArrayList?基本上,JsonLog是一个由我的安卓应用生成的不同类型的日志实现的接口--短信日志、通话日志、数据日志--而这个ArrayList是所有这些日志的集合。我一直在第6行得到一个错误。

代码语言:javascript
复制
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。我做什么好?

EN

回答 4

Stack Overflow用户

发布于 2015-02-23 17:14:42

您的JSON示例如下:

代码语言:javascript
复制
{
    "status": "ok",
    "comment": "",
    "result": {
    "id": 276,
    "firstName": "mohamed",
    "lastName": "hussien",
    "players": [
            "player 1",
            "player 2",
            "player 3",
            "player 4",
            "player 5"
    ]
}

因此,如果你想在SharedPrefrences中保存模块的数组列表,那么:

1-将使用此方法将返回的arraylist转换为json格式

代码语言:javascript
复制
public static String toJson(Object jsonObject) {
    return new Gson().toJson(jsonObject);
}

2-将其保存在共享前置文件中

代码语言:javascript
复制
PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....)));

3-随时从共享首选项中获取JsonString

代码语言:javascript
复制
String playersString= PreferencesUtils.getInstance(this).getString("players");

4-再次转换为数组列表

代码语言:javascript
复制
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对你有所帮助。

票数 28
EN

Stack Overflow用户

发布于 2018-12-12 20:59:19

如果你想使用数组,那就很简单了。

代码语言:javascript
复制
logs = gson.fromJson(br, JsonLog[].class); // line 6

以阵列JsonLog[].class的形式提供JsonLog

票数 8
EN

Stack Overflow用户

发布于 2018-11-20 11:28:26

我对gson不太确定,但这就是你用Jon.sample做这件事的方式,希望用gson也能有类似的方式。

{ "player“:"player 1","player 2","player 3","player 4",”player 5“}

===============================================

代码语言:javascript
复制
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);
                }           
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12384064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档