“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

201.HSPでゲームを作ろう:技術研究 HTTPアクセス→JSONフォーマットの操作 その1

2023年のコンテストも終わり、2024年のコンテストも視野に入れつつ、次のゲームを作る準備を始めることにした。
まずは、2年前にうまくいかずに放置した、JSONフォーマットのデータ操作から。

coro3.hatenablog.jp

この時は、hspinet.asをincludeして、httpinfo命令で直接JSONフォーマットをゲットしてきたのがダメかと思っていたが、どうやら、ゲットしたJSONフォーマットの構造に合わせて適切なパース命令を使えてなかったようだ。

wttr.inでは、天気の情報をJSONフォーマットで取得できるパラメータがある。wttr.inのGitHubを見ると、ヘルプには載ってない、2つ目の短めにJSONを取得できるフォーマットを見つけた。
https://wttr.in/628?format=j2

このフォーマットなら、天気情報が、現時点のものだけになり、短くなる。こんな感じ。

{
    "current_condition": [
        {
            "FeelsLikeC": "11",
            "FeelsLikeF": "52",
            "cloudcover": "25",
            "humidity": "94",
            "lang_ja": [
                {
                    "value": "所により曇り"
                }
            ],
            "localObsDateTime": "2024-01-22 11:54 PM",
            "observation_time": "02:54 PM",
            "precipInches": "0.0",
            "precipMM": "0.0",
            "pressure": "1008",
            "pressureInches": "30",
            "temp_C": "11",
            "temp_F": "52",
            "uvIndex": "1",
            "visibility": "10",
            "visibilityMiles": "6",
            "weatherCode": "116",
            "weatherDesc": [
                {
                    "value": "Partly cloudy"
                }
            ],
            "weatherIconUrl": [
                {
                    "value": ""
                }
            ],
            "winddir16Point": "SSE",
            "winddirDegree": "160",
            "windspeedKmph": "17",
            "windspeedMiles": "11"
        }
    ],
    "nearest_area": [
        {
            "areaName": [
                {
                    "value": "Kawaguchi"
                }
            ],
            "country": [
                {
                    "value": "Japan"
                }
            ],
            "latitude": "35.805",
            "longitude": "139.711",
            "population": "468565",
            "region": [
                {
                    "value": "Saitama"
                }
            ],
            "weatherUrl": [
                {
                    "value": ""
                }
            ]
        }
    ],
    "request": [
        {
            "query": "Lat 35.75 and Lon 139.70",
            "type": "LatLon"
        }
    ],
    "weather": [
        {
            "astronomy": [
                {
                    "moon_illumination": "86",
                    "moon_phase": "Waxing Gibbous",
                    "moonrise": "01:28 PM",
                    "moonset": "03:59 AM",
                    "sunrise": "06:48 AM",
                    "sunset": "04:57 PM"
                }
            ],
            "avgtempC": "9",
            "avgtempF": "49",
            "date": "2024-01-22",
            "maxtempC": "11",
            "maxtempF": "51",
            "mintempC": "8",
            "mintempF": "46",
            "sunHour": "7.5",
            "totalSnow_cm": "0.0",
            "uvIndex": "2"
        },
        {
            "astronomy": [
                {
                    "moon_illumination": "93",
                    "moon_phase": "Waxing Gibbous",
                    "moonrise": "02:20 PM",
                    "moonset": "05:00 AM",
                    "sunrise": "06:48 AM",
                    "sunset": "04:58 PM"
                }
            ],
            "avgtempC": "8",
            "avgtempF": "46",
            "date": "2024-01-23",
            "maxtempC": "10",
            "maxtempF": "50",
            "mintempC": "4",
            "mintempF": "39",
            "sunHour": "9.3",
            "totalSnow_cm": "0.0",
            "uvIndex": "2"
        },
        {
            "astronomy": [
                {
                    "moon_illumination": "97",
                    "moon_phase": "Waxing Gibbous",
                    "moonrise": "03:19 PM",
                    "moonset": "05:54 AM",
                    "sunrise": "06:47 AM",
                    "sunset": "04:59 PM"
                }
            ],
            "avgtempC": "5",
            "avgtempF": "41",
            "date": "2024-01-24",
            "maxtempC": "7",
            "maxtempF": "44",
            "mintempC": "3",
            "mintempF": "38",
            "sunHour": "9.8",
            "totalSnow_cm": "0.0",
            "uvIndex": "2"
        }
    ]
}

落とし穴は、配列表記だった。
[…]は、配列の表記になるんだけど、要素が1つでも配列として記述ができる。ま、当たり前。
これを見落としていて、直接配列内の要素を参照しようとしていた。
いくら正しいと思える命令の書き方をしても、取得できなかったのだった。

HSPJSON関連の命令は、配列形式のJSONを直接HSPの配列にしたり、添え字を使って参照ができないのだ。
続く。