繁体   English   中英

使用 Gson 库解析 java 中的 JSON 本地文件

[英]parse JSON local file in java with Gson library

我有这个 JSON 文件:

{
  "mapping": {
    "trips": [
      {
        "starttime": "15:10:50.000",
        "endtime": "15:17:30.000",
        "name": "island1",
        "program": [
          {
            "starttime": "15:14:27.000",
            "endtime": "15:14:54.000",
            "name": "Breakfast"
          },
          {
            "starttime": "15:16:35.000",
            "endtime": "15:16:56.000",
            "name": "Swimming"
          },
          {
            "starttime": "15:15:41.000",
            "endtime": "15:16:07.000",
            "name": "Lunch"
          },
          {
            "starttime": "15:10:50.000",
            "endtime": "15:11:19.000",
            "name": "Swimming"
          },
          {
            "starttime": "15:17:01.000",
            "endtime": "15:17:30.000",
            "name": "Dinner"
          }
        ]
      },
      {
        "starttime": "15:18:43.000",
        "endtime": "15:27:34.000",
        "name": "island2",
        "program": [
          {
            "starttime": "15:20:53.000",
            "endtime": "15:21:15.000",
            "name": "Yoga"
          },
          {
            "starttime": "15:20:17.000",
            "endtime": "15:20:43.000",
            "name": "Breakfast"
          },
          {
            "starttime": "15:20:28.000",
            "endtime": "15:20:55.000",
            "name": "Swimming"
          },
          {
            "starttime": "15:23:23.000",
            "endtime": "15:23:46.000",
            "name": "Swimming"
          },
          {
            "starttime": "15:20:24.000",
            "endtime": "15:20:45.000",
            "name": "Dinner"
          },
          {
            "starttime": "15:26:17.000",
            "endtime": "15:26:38.000",
            "name": "Clubbing"
          },
          {
            "starttime": "15:20:04.000",
            "endtime": "15:20:28.000",
            "name": "Sleeping"
          }
        ]
      }
      ]
  }
}

如何使用 Gson 在 Java 中解析它? 我尝试了类似的方法,但收到了 com.example.Model@43556938 null

public static void main(String[] args) {
         Gson gson = new Gson();
         try (Reader reader = new FileReader("myjsonfile.json")) {

              
                Mapping mapping = gson.fromJson(reader, Mapping.class);
                Trip trip = gson.fromJson(reader, Trip.class);

                
                System.out.println(mapping);
                System.out.println(trip);

            } catch (IOException e) {
                e.printStackTrace();
            }


    }

我想阅读所有信息(JSON 对象和数组)。 我可以逐行执行或有任何建议吗?

您正在获取映射 object 并打印相同的 object

像这样做:

private static final Type REVIEW_TYPE = new TypeToken<List<Mapping>>() {
}.getType();
Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(YOUR_JSON_FILE));
List<Mapping> data = gson.fromJson(reader, REVIEW_TYPE); // contains the whole mapping list
data.toScreen(); // print some value of data through iteration

当您从 Gson 读取时,将其分配给 Hashmap,然后从 map 读取。 希望这会对您有所帮助以下是执行此操作的代码:

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;

import com.google.gson.Gson;

public class JsontoObj {

    public static void main(String[] args) {
        Gson gson = new Gson();
        try (Reader reader = new FileReader("/Documents/sample.json")) {
            HashMap<String, Mapping>  mappings= gson.fromJson(reader, HashMap.class);
            
            //System.out.println(mappings);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Mapping{
    List<Trip> trips;

    public List<Trip> getTrips() {
        return trips;
    }

    public void setTrips(List<Trip> trips) {
        this.trips = trips;
    }

}
class Trip{
    private String startTime;
    private String endTime;
    private String name;
    private Program program[] = new Program[5];
    public String getStartTime() {
        return startTime;
    }
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getEndTime() {
        return endTime;
    }
    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Program[] getProgram() {
        return program;
    }
    public void setProgram(Program[] program) {
        this.program = program;
    }
    
}
class Program{
    private String startTime;
    private String endTime;
    private String name;
    public String getStartTime() {
        return startTime;
    }
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getEndTime() {
        return endTime;
    }
    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM