如何遍历 postgresql 中的 json 对象数组并访问其元素

How to iterate over an array of json object in postgresql and access its elements

我对 postgresql 的经验很少,想知道如何从 json 对象数组中访问某些字段,以便我可以动态地使用它们;

这是我尝试迭代的数组的样子: ``

[
    {
      "days": [
        {
          "dew": -1.1,
          "icon": "snow",
          "snow": 3.2,
          "temp": 0.5,
          "precip": 3.7,
          "source": "fcst",
          "sunset": "17:36:42",
          "sunrise": "07:31:09",
          "tempmax": 1.2,
          "tempmin": -0.6,
          "uvindex": 0,
          "winddir": 220.3,
          "datetime": "2022-02-25",
          "humidity": 89.1,
          "pressure": 996,
          "stations": null,
          "windgust": 61.2,
          "feelslike": -6.2,
          "moonphase": 0.84,
          "snowdepth": 1.4,
          "windspeed": 39.2,
          "cloudcover": 95.7,
          "conditions": "Snow, Rain, Overcast",
          "precipprob": 95.2,
          "preciptype": [
            "rain",
            "snow"
          ],
          "severerisk": 10,
          "visibility": 6.9,
          "description": "Cloudy skies throughout the day with rain or snow clearing later.",
          "precipcover": null,
          "solarenergy": 1.2,
          "sunsetEpoch": 1645803402,
          "feelslikemax": -5.5,
          "feelslikemin": -6.6,
          "sunriseEpoch": 1645767069,
          "datetimeEpoch": 1645740000,
          "solarradiation": 11.6
        }
      ],
      "address": "Helsinki, Finland",
      "latitude": 60.1712,
      "timezone": "Europe/Helsinki",
      "tzoffset": 2,
      "longitude": 24.9327,
      "queryCost": 1,
      "resolvedAddress": "Helsinki, Etelä-Suomi, Suomi"
    }
  ]

我正在尝试访问以下字段:地址、时区、日期时间、温度、湿度、降水、风、条件。

下面是我想在我的函数中动态引用这些字段的方式(wdata 是数组): https://i.stack.imgur.com/RhyhG.png

PostgreSQL 有以下 JSON 运算符用于访问 JSON 字段:->->>。您可以在这里阅读更多关于它们的信息:https://www.postgresql.org/docs/9.3/functions-json.html

在您的特定示例中(假设 wdata 持有您在上面发布的 JSON),您可以像这样访问数据

  • wdata->0->>'address'——即从数组中取出第一个元素,然后取出它的address字段;
  • wdata->0->'days'->0->>'humidity' - 即从数组中获取第一个元素,然后获取 days 字段(它本身是一个数组),然后获取嵌套数组的第一个元素,最后获取 humidity 嵌套数组中元素的字段;