使用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元素的情况。

3 Solutions collect form web for “使用GSONparsingJSON文件”

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()来读取对象的右大括号。
  • 为什么指针衰减优先于推导的模板?
  • 目标文件中未parsing的外部符号
  • 等待Angular 2在渲染视图/模板之前加载/parsing模型
  • 如何做一个十进制数的Integer.parseInt()?
  • 从URL获取子域名
  • 使用C#正则expression式删除HTML标记
  • 有没有办法更好地parsingstring?
  • 如何格式化date时间格式不同?
  • 如何防止扫描仪在input错误types时抛出exception?
  • 使用美丽的方式提取属性值
  • 最好的XMLparsing器的PHP