Java 无法使用GSON解析JSON文件

Java 无法使用GSON解析JSON文件,java,json,gson,Java,Json,Gson,我有一个非常简单的JSON文件,需要从中获取字段名和值。我在eclipse中使用Java1.7和gson。这是我的JSON文件: { "header": [ { "document_number": "document_number", "report": "report", "version": "version" } ], "summary": [ { "

我有一个非常简单的JSON文件,需要从中获取字段名和值。我在eclipse中使用Java1.7和gson。这是我的JSON文件:

{
   "header": [
      {
         "document_number": "document_number",     
         "report": "report",
         "version": "version"
      }
   ],

   "summary": [
      {
         "row_type": "row_type",
         "crs_id": "crs_id",
         "report_begin": "report_begin",
         "report_end": "report_end",
         "gross_tax": "gross_tax",
         "compensating_tax": "compensating_tax",
         "withholding_tax": "withholding_tax",
         "total_due_tax": "total_due_tax",
         "penalty": "penalty",
         "interest": "interest",
         "total_due_due": "total_due_due"
      }
   ],

   "detail": [

      {

         "row_type": "row_type",
         "county_name": "county_name",
         "rate_type": "rate_type",
         "location_code": "location_code",
         "gross_receipts": "gross_receipts",
         "deductions": "deductions",
         "taxable_gross_receipts": "taxable_gross_receipts",
         "tax_rate": "tax_rate","gross_tax": "gross_tax"

      }

   ]

}

我需要在知道不同字段名称的情况下浏览文件。在我看来,我希望加载JSON文件,然后返回第一个字段值(在本例中为header)。然后返回该根下的字段名和值。抱歉,如果我的术语不适用,我是JSON新手。我在网上找到了不同的gson文档,这太可怕了。在不知道字段名的情况下,我找不到任何用于提取值的内容。谢谢

这是代码。有关更多信息,请阅读内联评论或询问我

创建一些作为JSON字符串副本的POJO类

class MyJSON {
    ArrayList<Header> header;
    ArrayList<Summary> summary;
    ArrayList<Detail> detail;
}

class Header {
    String document_number;
    String report;
    String version;
}
// create classes for Summary and Detail as well in the similar way of Header
// the variable name must be same as it is in JSON string along with case.

...

// read JSON from the file
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(new File("resources/json1.txt")));
String line = null;
while ((line = reader.readLine()) != null) {
    builder.append(line);
}
reader.close();

// create a new Gson object
Gson gson = new Gson();
// convert JSON string to POJO object
MyJSON object = gson.fromJson(builder.toString(), MyJSON.class);

// printing only header
for (Header header : object.header) {
    System.out.println(header.document_number + ", " + header.report + ", "
            + header.version);
}

这是我的准备运行解决方案

package stackoverflow.questions;

import java.util.*;

import com.google.gson.*;

public class Q23704415 {

    public static void main(String[] args) {
       String json = "{                                                                      "+
               "   \"header\": [                                                       "+
               "      {                                                                "+
               "         \"document_number\": \"document_number\",                     "+
               "         \"report\": \"report\",                                       "+
               "         \"version\": \"version\"                                      "+
               "      }                                                                "+
               "   ],                                                                  "+
               "                                                                       "+
               "   \"summary\": [                                                      "+
               "      {                                                                "+
               "         \"row_type\": \"row_type\",                                   "+
               "         \"crs_id\": \"crs_id\",                                       "+
               "         \"report_begin\": \"report_begin\",                           "+
               "         \"report_end\": \"report_end\",                               "+
               "         \"gross_tax\": \"gross_tax\",                                 "+
               "         \"compensating_tax\": \"compensating_tax\",                   "+
               "         \"withholding_tax\": \"withholding_tax\",                     "+
               "         \"total_due_tax\": \"total_due_tax\",                         "+
               "         \"penalty\": \"penalty\",                                     "+
               "         \"interest\": \"interest\",                                   "+
               "         \"total_due_due\": \"total_due_due\"                          "+
               "      }                                                                "+
               "   ],                                                                  "+
               "                                                                       "+
               "   \"detail\": [                                                       "+
               "                                                                       "+
               "      {                                                                "+
               "                                                                       "+
               "         \"row_type\": \"row_type\",                                   "+
               "         \"county_name\": \"county_name\",                             "+
               "         \"rate_type\": \"rate_type\",                                 "+
               "         \"location_code\": \"location_code\",                         "+
               "         \"gross_receipts\": \"gross_receipts\",                       "+
               "         \"deductions\": \"deductions\",                               "+
               "         \"taxable_gross_receipts\": \"taxable_gross_receipts\",       "+
               "         \"tax_rate\": \"tax_rate\",\"gross_tax\": \"gross_tax\"       "+
               "                                                                       "+
               "      }                                                                "+
               "                                                                       "+
               "   ]                                                                   "+
               "                                                                       "+
               "}                                                                      ";


         JsonElement root = new JsonParser().parse(json);
         JsonObject jo = root.getAsJsonObject();

         JsonObject header = jo.get("header").getAsJsonArray().get(0).getAsJsonObject();

         Set<Map.Entry<String, JsonElement>> set = header.entrySet();
         for(Map.Entry<String, JsonElement> e : set){
             System.out.println(e.getKey() + "->" + e.getValue());
         }



    }

}
基本上遍历JSON以获得正确的信息。我忘记了:这是我代码的结果:

document_number->"document_number"
report->"report"
version->"version"

将JSON转换为一个对象,然后遍历该对象。是的,只需将数据读入列表和映射,并“原始”处理即可。对于大多数工具包,如果您需要,可以通过多种方式请求地图键列表。请注意,JSON不能保证“对象”(Map)中元素的顺序——在序列化/反序列化过程中,顺序可以在任何地方更改,而且许多Map实现都不维护order.BTW,请访问JSON.org并学习JSON语法。它只需要5-10分钟,如果你知道语法的意思,事情就更容易理解了。你拥有的是一个包含header、summary和detail元素的对象(Map)。每个元素本身就是一个数组(列表),可能包含多个对象(映射)。
JsonObject header = jo.get("header").getAsJsonArray().get(0).getAsJsonObject();
document_number->"document_number"
report->"report"
version->"version"