0

REST API と Square の Retrofit ライブラリを使用して、Philips Hue スマートライトを制御するアプリを作成しています。

問題は、/lights各ライトのidプロパティを json 応答のキーとして使用して応答を呼び出すと、(jsonapi 応答で一般的なライト オブジェクトの配列ではなく、Retrofit によって期待されるように思われる) 返されることです)。 .

ここに私が見ているリクエスト/レスポンスがあります

GET /lights

戻り値

``` {

"1": {
    "state": {
        "on": true,
        "bri": 144,
        "hue": 13088,
        "sat": 212,
        "xy": [0.5128,0.4147],
        "ct": 467,
        "alert": "none",
        "effect": "none",
        "colormode": "xy",
        "reachable": true
    },
    "type": "Extended color light",
    "name": "Hue Lamp 1",
    "modelid": "LCT001",
    "swversion": "66009461",
    "pointsymbol": {
        "1": "none",
        "2": "none",
        "3": "none",
        "4": "none",
        "5": "none",
        "6": "none",
        "7": "none",
        "8": "none"
    }
},
"2": {
    "state": {
        "on": false,
        "bri": 0,
        "hue": 0,
        "sat": 0,
        "xy": [0,0],
        "ct": 0,
        "alert": "none",
        "effect": "none",
        "colormode": "hs",
        "reachable": true
    },
    "type": "Extended color light",
    "name": "Hue Lamp 2",
    "modelid": "LCT001",
    "swversion": "66009461",
    "pointsymbol": {
        "1": "none",
        "2": "none",
        "3": "none",
        "4": "none",
        "5": "none",
        "6": "none",
        "7": "none",
        "8": "none"
    }
}

} ```

ライト オブジェクトの配列を返す代わりに、ライト ID をキーにした各ライト オブジェクトを返すことに注意してください。

これを Retrofit で解析する方法を知っている人はいますか?

4

2 に答える 2

1

Retrofit は GSON を使用して受信した json を逆シリアル化し、次にクラスを使用して、フィードしている json を理解します。

Gson では、カスタム デシリアライザーを作成することもできます作成方法を学習するための多くのリソースがあります。

デシリアライザーでできることは、json オブジェクトのキーセットを取得し、それを反復処理することです。次のようなキーセットを取得できます

Set<Map.Entry<String, JsonElement>> nodeSet = jsonObject.entrySet();

このノードセットと

for(Map.Entry<String, JsonElement> entryItem : nodeSet) {
        JsonObject currentValue = entryItem.getValue().getAsJsonObject();
}

currentValue は、「state」、「type」などの要素を含む JsonObject になります。

于 2015-06-29T15:23:43.360 に答える