如何根据给定的站点获取温度值?

How to get value of temperature based on station given?

我需要根据站点名称“station1”将来自 json 有效负载的温度值存储为 Temperature,但我总是以 null 结尾。

我的代码:

JSONParser parser = new JSONParser()

try (Reader reader = new FileReader("src/test/resources/jsonPayload/response.json")) {


    JSONObject jsonObject = (JSONObject) parser.parse(reader);
    String response = (String) jsonObject.get("response");
    JsonPath js = new JsonPath(response);
    int size = js.getInt(“list.size()");



    List<String> station = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        station.add(js.getString("list[$i].station.station_name))
  
    def Temperature
Temperature = new JsonSlurper().parseText(response).list.station.station_name=["station1”].obs.temp.temprature
}

json 负载:

{
    "list": [
        {
            "station": {
                "identity": {
                    "station_name": "station1"
                }
            },
            "obs": {
                "temp": {
                    "temprature": 13.2
                }
                
            }
        } ]
}

我猜你的问题可能来自于此

try (Reader reader = new FileReader("src/test/resources/jsonPayload/response.json"))

由于您正在尝试读取 classpath 中的文件,因此您需要指定以不同方式查找文件的位置。

试试

try (Reader reader = new FileReader("jsonPayload/response.json"))

改为

您的 JSON 嵌套 ObjectsArray 中,因此您可以像下面那样尝试读取温度值。我用多个温度值更新了你的 JSON 以便更清楚。

已更新JSON:

{
    "list": [
        {
            "station": {
                "identity": {
                    "station_name": "station1"
                }
            },
            "obs": {
                "temp": {
                    "temprature": 13.2
                }
            }
        },
        {
            "station": {
                "identity": {
                    "station_name": "station2"
                }
            },
            "obs": {
                "temp": {
                    "temprature": 15.2
                }
            }
        }
    ]
}

代码#1: 您可以使用JsonPath读取数据。 JsonPath 是使用 XPath 的替代方法,可以轻松地从对象文档中获取值。

    File jsonFile = new File("Sample.json");
    JSONArray jsonArray = new JSONArray(JsonPath.parse(jsonFile).read("list").toString());

    for (int i = 0; i < jsonArray.length(); i++) {
        String stationName = JsonPath.parse(jsonFile).read("list[" + i + "].station.identity.station_name")
                .toString();
        if (stationName.equalsIgnoreCase("station2")) {
            String temparature = JsonPath.parse(jsonFile).read("list[" + i + "].obs.temp.temprature").toString();
            System.out.println("Temparature: "+temparature);
        }
    }

输出:

Temparature: 15.2

JsonPath

的 Maven 依赖
    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>0.9.0</version>
    </dependency>

以下代码片段可用于在没有任何库的情况下读取数据。

代码#2:读取所有温度值。

        String jsonDataAsString = new String(Files.readAllBytes(Paths.get("Sample.json")));
        JSONObject jsonObject = new JSONObject(jsonDataAsString);
        JSONArray jsonArray = new JSONArray(jsonObject.get("list").toString());

        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = new JSONObject(jsonArray.get(i).toString());
            jsonObject = new JSONObject(jsonObject.get("obs").toString());
            jsonObject = new JSONObject(jsonObject.get("temp").toString());
            System.out.println("Temparature" + i + ": " + jsonObject.get("temprature"));
        }

输出:

Temparature0: 13.2
Temparature1: 15.2

代码#3: 根据站点名称获取温度值。

        String jsonDataAsString = new String(Files.readAllBytes(Paths.get("Sample.json")));
        JSONObject jsonTemparatureObject;
        JSONObject jsonObject = new JSONObject(jsonDataAsString);
        JSONArray jsonArray = new JSONArray(jsonObject.get("list").toString());

        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = new JSONObject(jsonArray.get(i).toString());
            jsonTemparatureObject = new JSONObject(jsonObject.get("obs").toString());
            jsonObject = new JSONObject(jsonObject.get("station").toString());
            jsonObject = new JSONObject(jsonObject.get("identity").toString());

            if (jsonObject.get("station_name").toString().equalsIgnoreCase("station2")) {
                jsonObject = new JSONObject(jsonTemparatureObject.get("temp").toString());
                System.out.println("Temparature: " + jsonObject.get("temprature"));
            }
        }

输出:

Temparature: 15.2