java - Gson解析根元素不常量的JSON文件

标签 java json gson

我正在尝试解析一个如下所示的 json 文件 -

 {
  "gmps-camino": [
    {
      "id": "2903315183",
      "category": "NEW",
      "year": "2016",
      "make": "Chevrolet",
      "model": "4500 Gas",
      "trim": "2WD Reg Cab 150"",
      "type": "",
      "price": "56001.000000",
      "photo": "http://inventory-dmg.assets-cdk.com/chrome_jpgs/2016/24174x90.jpg"
    },
    {
      "id": "2774517143",
      "category": "NEW",
      "year": "2016",
      "make": "Chevrolet",
      "model": "Cruze",
      "trim": "Sedan L",
      "type": "CAR",
      "price": "17495.000000",
      "photo": "http://inventory-dmg.assets-cdk.com/RTT/Chevrolet/2016/3077853/default/ext_GAZ_deg01x90.jpg"
    }
  ]
 }

我正在尝试使用 Gson 来解析它并创建一个类来模仿它 -

public class VehicleJson {
  String builder
  List<VehicleWithoutBuilder> vehiclesWithoutBuilder;
}

class vehicleWithoutBuilder {
  String id;
  String Category;
  String year;
  String make;
  String model;
  String trim;
  String type;
  Double price;
  String photo;
}

我希望将根元素的值“gmps-camino”插入到构建器中,并将 JSON 的其余部分插入到 vehiclesWithoutBuilder 列表中。到目前为止,我尝试解析这个文件是徒劳的,因为 Gson 认为没有名为 gmps-camino 的类,并且为字符串和列表提供了 null。正确的做法是什么?

这是我试图解析的代码 -

BufferedReader br = new BufferedReader(new FileReader(jsonFileName));
Gson gson = new Gson();
VehicleJson vj = gson.fromJson(br, VehicleJson.class);

最佳答案

供您引用,如果需要,您可以在代码中使用 JSONParserJSONArray。尝试下面的一段代码并根据需要修改名称:

 JSONParser parser = new JSONParser();

   try {   

          Object objct = parser.parse(new FileReader("...")); //the location/name of your json file
          JSONObject jsonObject = (JSONObject) objct;
          JSONArray objs = (JSONArray) jsonObject.get("gmps-camino");
          for (Object obj : objs) {
               JSONObject jobj = (JSONObject) obj;
               String gmps = (String) jobj.get("gmps-camino");
               System.out.println(gmps);
          }
      }

您需要相应地更改名称。

有关引用,请参阅 json-simple decoding example 上的“示例”页面。

或者,您可以检查以下 GSON 用法:

private static final Type VEHICLE = new TypeToken<List<vehicleWithoutBuilder>>() {
}.getType();

    Gson gson = new Gson();
    JsonReader reader = new JsonReader(new FileReader(filename));
    List<vehicleWithoutBuilder> data = gson.fromJson(reader, VEHICLE ); // contains the whole list
    data.toScreen(); // prints to screen some values

关于java - Gson解析根元素不常量的JSON文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405726/

相关文章:

java - RxJava : How to conditionally apply Operators to an Observable without breaking the chain

iphone - IOS 4.3 如何正确解析来自 Web 服务的 Json 响应并将其绑定(bind)到 UITABLEVIEW

java - 值 <html><head>&lt;title&gt;java.lang.String 类型的 Apache 无法转换为 JSONObject

android - 无法将字符串 Json 解析为 Json 对象

java - 反序列化GSON中的递归多态类

java - 将边框放置在 JPanel 内所需的位置

java - 如何关闭 Spring Boot 命令行应用程序

android - Json 可能在 setEntity 附近不使用 HttpPost

java - 如何正确转义JSON中的反斜杠(使用GSON进行反序列化)

java - Maven 部署 -x 给出 Failed to deploy artifacts ....Access returned to : http://