libgdx Json解析

嗨,我正试图从我的json中获取所有’id’值到我的’results’数组中。

我真的不明白libgdx的json类是如何工作的,但我知道json是如何工作的。

这是json : http : //pastebin.com/qu71EnMx

这是我的代码

Array results = new Array(); Json jsonObject = new Json(OutputType.json); JsonReader jsonReader = new JsonReader(); JsonValue jv = null; JsonValue jv_array = null; // try { String str = jsonObject.toJson(jsonString); jv = jsonReader.parse(str); } catch (SerializationException e) { //show error } // try { jv_array = jv.get("table"); } catch (SerializationException e) { //show error } // for (int i = 0; i < jv_array.size; i++) { // try { jv_array.get(i).get("name").asString(); results.add(new sic_PlayerInfos( jv_array.get(i).get("id").asInt() )); } catch (SerializationException e) { //show error } } 

这是我得到的错误 :jv_array.size上的’Nullpointer’

这样做将导致非常hacky,不可维护的代码。 您的JSON文件看起来非常简单,但如果您自己解析整个JSON文件,则代码很糟糕。 试想一下,如果你拥有的不仅仅是一个id ,它会是怎样的,这可能会发生。

更加干净的方式是面向对象的。 创建一个类似于JSON文件结构的对象结构。 在您的情况下,这可能如下所示:

 public class Data { public Array table; } public class TableEntry { public int id; } 

现在,您可以使用libgdx轻松地反序列化JSON,而无需任何自定义序列化程序,因为libgdx使用reflection来处理大多数标准情况。

 Json json = new Json(); json.setTypeName(null); json.setUsePrototypes(false); json.setIgnoreUnknownFields(true); json.setOutputType(OutputType.json); // I'm using your file as a String here, but you can supply the file as well Data data = json.fromJson(Data.class, "{\"table\": [{\"id\": 1},{\"id\": 2},{\"id\": 3},{\"id\": 4}]}"); 

现在你有了一个普通的旧java对象(PO​​JO),它包含了你需要的所有信息,你可以根据需要进行处理。

 Array results = new Array(); for (TableEntry entry : data.table) { results.add(entry.id); } 

完成。 代码非常干净,易于扩展。