2017-08-15 6 views
1

JSONをREST APIから解析しようとしていますが、データのキーが大文字の場合、データにアクセスできません。Groovyの大文字のキーを含むJSONを解析できません

{ 
    "body": { 
     "devices": [{ 
      "_id": "xxxxxxxxxx", 
      "cipher_id": "xxxxxxxx", 
      "last_status_store": 1502808369, 
      "modules": [{ 
       "_id": "xxxxxxx", 
       "type": "xxxxxxx", 
       "last_message": 1502808365, 
       "last_seen": 1502808359, 
       "dashboard_data": { 
        "time_utc": 1502808359, 
        "Temperature": 18.9, 
        "temp_trend": "down", 
        "Humidity": 27, 
        "date_max_temp": 1502804720, 
        "date_min_temp": 1502808359, 
        "min_temp": 18.9, 
        "max_temp": 22.2 
       }, 
       "data_type": [ 
        "Temperature", 
        "Humidity" 
       ], 
       "last_setup": 1502731328, 
       "battery_vp": 6354, 
       "battery_percent": 100, 
       "rf_status": 67, 
       "firmware": 44 
      }], 
      "place": { 
       "altitude": 63.395306309052, 
       "city": "xxxxxx", 
       "country": "US", 
       "timezone": "America/New_York", 
       "location": [-72.532673, 
        42.0425917 
       ] 
      }, 
      "station_name": "xxxxxxxxxxx", 
      "type": "NAMain", 
      "dashboard_data": { 
       "AbsolutePressure": 1004.6, 
       "time_utc": 1502808354, 
       "Noise": 50, 
       "Temperature": 22.7, 
       "temp_trend": "up", 
       "Humidity": 69, 
       "Pressure": 1012.1, 
       "pressure_trend": "stable", 
       "CO2": 0, 
       "date_max_temp": 1502808290, 
       "date_min_temp": 1502801263, 
       "min_temp": 21.3, 
       "max_temp": 22.7 
      }, 
      "data_type": [ 
       "Temperature", 
       "CO2", 
       "Humidity", 
       "Noise", 
       "Pressure" 
      ], 
      "co2_calibrating": false, 
      "date_setup": 1502731277, 
      "last_setup": 1502731277, 
      "module_name": "Indoor", 
      "firmware": 132, 
      "last_upgrade": 1502731279, 
      "wifi_status": 51 
     }] 
    }, 
    "status": "ok", 
    "time_exec": 0.019752025604248, 
    "time_server": 1502808443 
} 

私はGroovy Jsonスラーパーを使用してJSONにアクセスし、次のコマンドを実行しようとしています。応答は私のデバッガでうまく戻ってきます.Reponse.contentは、私がサーバーに送信したHTTPrequestの値です。

def stationInfo = jsonSlurper.parseText(response.content as String) 
def outsideTemp = stationInfo.body.devices.modules.dashboard_data.Temperture  
def outsideHumidty = stationInfo.body.devices.modules.dashboard_data.Humidty  
def insideTemp = stationInfo.body.devices.dashboard_data.Temperture 

outsideTemp、outsideHumidty、およびinsideTempはすべてeqaullある "[ヌル]" に私は私のデバッガでそれらを表示するとき。なぜこれが起こっているのか、どのように修正するのかについてのアイデアはありますか?これらは大文字なので、コンパイラは何かを仮定していますか?

+0

で同じを見ることができますか? (もしそうなら、それを明示的にあなたの質問にしてください) –

+2

おそらく問題は、 'devices'は配列であり、' [index] 'によってアクセスされるはずですが、扱うのは普通のオブジェクトです –

+1

' "modules" ' –

答えて

1

あなたはほとんどそこにいますか?

あなたが添付したjsonは有効ではないように見えますが、動作するように修正されています。 Temparatureと同様に

def pJson = new groovy.json.JsonSlurper().parseText(response.content as String) 
println pJson.body.devices.modules.dashboard_data.Temperature.flatten() 
println pJson.body.devices.dashboard_data.Temperature.flatten() 

、あなたはそれは同様Humidityのために働く得ることができます。

あなたは私たちがdashboard_data内の他の要素が正しく返されていることを前提としていますdemo

+0

ありがとうございました。私はまた、役に立たなかった温度と湿度をミスペーストしました。 – Maz

関連する問題