使用Gson库,如何将JSON字符串转换为自定义类JsonLog的数组列表?基本上,JsonLog是由我的Android应用程序制作的不同类型的日志实现的接口——短信日志、通话日志、数据日志——这个数组列表是所有这些日志的集合。第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
    }
}

编译器似乎不明白我引用的是一个类型化的数组列表。我该怎么办?


当前回答

为什么没有人写这个简单的方式转换JSON字符串在列表?

List<Object> list = Arrays.asList(new GsonBuilder().create().fromJson(jsonString, Object[].class));

其他回答

科特林

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)

为什么没有人写这个简单的方式转换JSON字符串在列表?

List<Object> list = Arrays.asList(new GsonBuilder().create().fromJson(jsonString, Object[].class));

如果你想使用数组,这很简单。

logs = gson.fromJson(br, JsonLog[].class); // line 6

提供JsonLog作为数组JsonLog[].class

我不确定gson怎么样但这就是你和Jon相处的方式。样品希望一定有类似的方法使用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);
                }           
    }
}

如果你想将Json转换为类型化的ArrayList,指定列表中包含的对象的类型是错误的。正确的语法如下:

 Gson gson = new Gson(); 
 List<MyClass> myList = gson.fromJson(inputString, ArrayList.class);