簡體   English   中英

如何從Spring Boot中嵌套的JSON數據中提取值

[英]How to extract value from nested JSON data in Spring Boot

目前,我每 3 分鍾撥打一次 API 以獲取天氣數據。 這是我作為字符串得到的響應:


{
    "data": {
        "timelines": [
            {
                "timestep": "current",
                "endTime": "2023-01-20T13:33:00-05:00",
                "startTime": "2023-01-20T13:33:00-05:00",
                "intervals": [
                    {
                        "startTime": "2023-01-20T13:33:00-05:00",
                        "values": {
                            "dewPoint": 18.63,
                            "humidity": 66,
                            "precipitationIntensity": 0,
                            "precipitationProbability": 0,
                            "pressureSeaLevel": 1019.19,
                            "pressureSurfaceLevel": 1018.65,
                            "temperature": 25.5,
                            "temperatureApparent": 25.5,
                            "uvIndex": 3,
                            "windDirection": 151.69,
                            "windSpeed": 4.88
                        }
                    }
                ]
            }
        ]
    }
}

我想知道如何提取“值”中的屬性值(如“露點”、“濕度”等)。

我一直在嘗試使用 Beans 等來做到這一點,但是數據是嵌套的並且其中一些是數組這一事實讓我很難理解。 基本上,我想從 JSON 字符串中提取“值”中屬性的每個值,將它們連接成一個僅包含值的數組,然后將該數組保存在數據庫中。

您首先需要為 model 創建類,然后獲取字符串並使用Object 映射器獲取字符串並將其轉換為 object。

class WeatherData {
    List<Timelines> timelines; // all other object are nested in here.
}

class Timelines {
    String timestep;
    String endTime;
    String startTime;
    List<Intervals> intervals;
}

class Intervals {
    String startTime;
    Values values;
}

class Values {
  double dewPoint;
  int humidity;
  int precipitationIntensity;
  int precipitationProbability;
  double pressureSeaLevel;
  double pressureSurfaceLevel;
  double temperature;
  double temperatureApparent;
  int uvIndex;
  double windDirection; 
  double windSpeed;
}
WeatherData data = new ObjectMapper().readValue(jsonString, WeatherData.class);

一旦將 map json 轉換為 Object,有幾種方法可以解決這個問題。您可以遍歷這些值,所以有兩個 for 循環。 到達間隔后,您可以將值添加到數組中。 List<WeatherData> newWeatherDataList = new ArrayList();

另一種方法是將 object 壓平,這樣它就不會那么嵌套了。 我建議查找如何在 Java 中壓平 object 您仍然需要一個 for 循環來遍歷間隔數組。 然后像上面一樣將它添加到新列表中。

從這里您可以將數據批量插入到表中

我希望這有助於讓我知道我是否可以更新答案以提供更多背景信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM