Java 读取文本文件以获取特定格式的值

Java Read Textfile to get values in certain format

我需要读取包含以下数据的文本文件:

{“car”:{“name”:”Toyota”,”vin”:637834623,”location”:”SomePlace”}}

我需要获取名称、vin 和位置

我该怎么做? 我在想我可以尝试使用 JSON 阅读它,它会起作用吗?

谢谢

上面的数字不需要加引号,下面是有效的JSON。使用像 here will confirm that. Use a package like GSON or Jackson 这样的 JSON linter 将其反序列化为您的 Java 应用程序可以轻松使用的 Car POJO。我个人比较喜欢Jackson,虽然对于简单的使用来说可能有点重量级。

{
    "car": {
        "name": "Toyota",
        "vin": 637834623,
        "location": "SomePlace"
    }
}

这是一个使用 GSON(google 的 json 库)的工作示例:

请注意,您必须使用 "" 引号而不是 “”,因为后者在 JSON 中无效。如果需要,您可以在输入字符串上使用 .replaceAll(...) 来替换这些字符。

public class ReadCarFile {

    public static final Gson gson = new GsonBuilder().registerTypeAdapter(Car.class, new CarTypeAdapter()).create();

    public static void main(String[] args) {
        String input = "{\"car\":{\"name\":\"Toyota\",\"vin\":637834623,\"location\":”SomePlace\"}}";

        Car result = gson.fromJson(input, Car.class);
    }

    static class CarTypeAdapter implements JsonDeserializer<Car> {

        @Override
        public Car deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
            JsonObject carObject = jsonElement.getAsJsonObject().get("car").getAsJsonObject();

            Car car = new Car();
            car.name = carObject.get("name").getAsString();
            car.vin = carObject.get("vin").getAsInt();
            car.location = carObject.get("location").getAsString();
            return car;
        }
    }

    static class Car {

        @SerializedName("name")
        public String name;

        @SerializedName("vin")
        public int vin;

        @SerializedName("location")
        public String location;

    }
}