使用GSONparsingJSON文件

我想使用GSONJAVA中parsing这个JSON文件:

{ "descriptor" : { "app1" : { "name" : "mehdi", "age" : 21, "messages": ["msg 1","msg 2","msg 3"] }, "app2" : { "name" : "mkyong", "age" : 29, "messages": ["msg 11","msg 22","msg 33"] }, "app3" : { "name" : "amine", "age" : 23, "messages": ["msg 111","msg 222","msg 333"] } } } 

但我不知道如何join到根元素: 描述符 ,之后是app3元素,最后是名称元素。

我遵循这个教程http://www.mkyong.com/java/gson-streaming-to-read-and-write-json/ ,但它并没有显示具有root和childs元素的情况。

Imo,用GSONparsing你的JSON响应的最好方法就是创build能够匹配你的响应的类,然后使用Gson.fromJson()方法。
例如:

 class Response { Map<String, App> descriptor; // standard getters & setters... } class App { String name; int age; String[] messages; // standard getters & setters... } 

然后只使用:

 Gson gson = new Gson(); Response response = gson.fromJson(yourJson, Response.class); 

你的yourJson可以是一个String ,任何ReaderJsonReader或者JsonElement

最后,如果你想访问任何特定的领域,你只需要做:

 String name = response.getDescriptor().get("app3").getName(); 

您可以按照其他答案中的build议手动parsingJSON,但是我个人认为这种方法在长期内更清晰,更易于维护,而且更适合JSON的整体思路。

我使用的是gson 2.2.3

 public class Main { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { JsonReader jsonReader = new JsonReader(new FileReader("jsonFile.json")); jsonReader.beginObject(); while (jsonReader.hasNext()) { String name = jsonReader.nextName(); if (name.equals("descriptor")) { readApp(jsonReader); } } jsonReader.endObject(); jsonReader.close(); } public static void readApp(JsonReader jsonReader) throws IOException{ jsonReader.beginObject(); while (jsonReader.hasNext()) { String name = jsonReader.nextName(); System.out.println(name); if (name.contains("app")){ jsonReader.beginObject(); while (jsonReader.hasNext()) { String n = jsonReader.nextName(); if (n.equals("name")){ System.out.println(jsonReader.nextString()); } if (n.equals("age")){ System.out.println(jsonReader.nextInt()); } if (n.equals("messages")){ jsonReader.beginArray(); while (jsonReader.hasNext()) { System.out.println(jsonReader.nextString()); } jsonReader.endArray(); } } jsonReader.endObject(); } } jsonReader.endObject(); } } 

在解决这样的问题时要记住的一件事是,在JSON文件中, {表示一个JSONObject和一个[表示JSONArray 。 如果能够正确地pipe理它们,那么完成parsingJSON文件的任务将是非常容易的。 上面的代码对我来说真的很有帮助,我希望这个内容给上面的代码增加一些含义。

Gson JsonReader文档解释了如何处理JsonObjectsJsonArraysparsing:

  • 在数组处理方法中,首先调用beginArray()来使用数组的开始括号。 然后创build一个积累值的while循环,当hasNext()为false时结束。 最后,通过调用endArray()来读取数组的右括号。
  • 在对象处理方法中,首先调用beginObject()来使用对象的左大括号。 然后创build一个while循环,根据名称为局部variables赋值。 当hasNext()为false时,此循环应该终止。 最后,通过调用endObject()来读取对象的右大括号。