2017-07-29 5 views
0

こんにちは、私はjson構造を操作するための問題に直面しています。私はgsonの初心者です。私はIoTプラットフォームから複雑なjson構造を取得しています。構造の最初のレベル(tenantid、timestamp)の値を取得できますが、構造を深く知りたいときにクラッシュします。私は、このペイロードを通過するための要素をgsonのドキュメントに手助けすることが分かっていません。私はそれにクラスをマップしようとしました - それは、おそらく私のために複雑すぎる...働いていませんでした... あなたの助けてくれてありがとう!ここでgsonによるjson複雑なペイロード管理

/* The payload structure is as follow : 
* {"payload": 
*  "{ 
*   \"tenantId\":\"56ab3a090cf2f00fce9ad9\", 
*   \"timestamp\":\"2017-07-15T10:56:27.124Z\", 
*   \"firingRule\": 
*   { 
*    \"id\":\"0b4e0dcd-4634-4f2-96ce-7ceefd95b584\", 
*    \"name\":\"testFR0StreamSample02-01\", 
*    \"enabled\":true, 
*    \"matchingRuleIds\": [\"e57927-be87-48dd-be42-8c01d13004d0\"], 
*    \"aggregationKeys\": [\"metadata.source\"], 
*    \"firingType\":\"ALWAYS\" 
*   }, 
*   \"matchingContext\": 
*   { 
*    \"tenantId\":\"56ab3a090cf600fce9ad9\", 
*    \"timestamp\":\"2017-07-15T10:56:27.114Z\", 
*    \"matchingRule\": 
*    { 
*     \"id\":\"e5ec7927-be7-48dd-be42-8c01d13004d0\", 
*     \"name\":\"Test temperature > 20\", 
*     \"enabled\":true, 
*     \"dataPredicate\": 
*     { 
*      \">\":[{\"var\":\"value.temperature\"},20]}}, 
*      \"data\": 
*      { 
*       \"streamId\":\"android35739073120059\", 
*       \"timestamp\":\"2017-07-15T10:56:27.106Z\", 
*       \"location\":{\"lat\":48.872015,\"lon\":2.348264}, 
*       \"model\":\"ModelOABDemoApp00\", 
*       \"value\": 
*       { 
*        \"revmin\":7505, 
*        \"hygrometry\":98, 
*        \"temperature\":92}, 
*        \"tags\":[\"OABDemoApp.00\"], 
*        \"metadata\": 
*        { 
*         \"source\":\"URN:LO:NSID:SENSOR:TESTFLGAPPOAB00000\", 
*         \"connector\":\"mqtt\" 
*        } 
*       } 
*     } 
*   }"} 
*/ 

//あなたはgetAsJsonObject()を使用して、子JSONオブジェクトにアクセスすることができます私のコード

Gson gson = new Gson(); 
    String sLiveObjectsPayload = "{\"tenantId\":\"56ab3a090cf2ff600fce9ad9\",\"timestamp\":\"2017-07-29T08:31:24.026Z\",\"firingRule\":{\"id\":\"0b4e0dcd-4634-4ef2-96ce-7ceefd95b584\",\"name\":\"testFR0StreamSample02-01\",\"enabled\":true,\"matchingRuleIds\":[\"e5ec7927-be87-48dd-be42-8c01d13004d0\"],\"aggregationKeys\":[\"metadata.source\"],\"firingType\":\"ALWAYS\"},\"matchingContext\":{\"tenantId\":\"56ab3a090cf2ff600fce9ad9\",\"timestamp\":\"2017-07-29T08:31:24.012Z\",\"matchingRule\":{\"id\":\"e5ec7927-be87-48dd-be42-8c01d13004d0\",\"name\":\"Test temperature > 20\",\"enabled\":true,\"dataPredicate\":{\">\":[{\"var\":\"value.temperature\"},20]}},\"data\":{\"streamId\":\"android357329073120059\",\"timestamp\":\"2017-07-29T08:31:23.992Z\",\"location\":{\"lat\":48.872015,\"lon\":2.348264},\"model\":\"ModelOABDemoApp00\",\"value\":{\"revmin\":9147,\"hygrometry\":70,\"temperature\":118},\"tags\":[\"OABDemoApp.00\"],\"metadata\":{\"source\":\"URN:LO:NSID:SENSOR:TESTFLGAPPOAB00000\",\"connector\":\"mqtt\"}}}}"; 
    JsonObject jsonPayload ; 
    jsonPayload = gson.fromJson(sLiveObjectsPayload, JsonObject.class); 

    String sTenantId ; 
    String sTimeStamp ; 
    String sFiringRule ; 
    String sFiringRuleId ; 
    String sName ; 
    sTenantId = jsonPayload.get("tenantId").getAsString();   // ok 
    sTimeStamp = jsonPayload.get("timestamp").getAsString();   // ok 
    sFiringRuleId = jsonPayload.get("firingRule.id").getAsString(); // crash 
    sFiringRule = jsonPayload.get("firingRule").getAsString();  // crash 
    sName = jsonPayload.get("name").getAsString();     // crash 

答えて

0

の抽出物です。

sTenantId = jsonPayload.get("tenantId").getAsString(); 
sTimeStamp = jsonPayload.get("timestamp").getAsString(); 

JsonObject firingRule = jsonPayload.getAsJsonObject("firingRule"); 
sFiringRuleId = firingRule.get("id").getAsString(); 
sName = firingRule.get("name").getAsString(); 
+0

ありがとう、素晴らしい作品! – fragae

関連する問題