如何遍历 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
嵌套数组中元素的字段;
我对 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
嵌套数组中元素的字段;