2017-01-16 5 views
1

ダイナミックな部分があるうちにjsonの構造が固定されているという問題があります。ダイナミックjsonをマップに変換するジャック

{ 
    "contentlets": [ 
    { 
     "template": "8f8fab8e-0955-49e1-a2ed-ff45e3296aa8", 
     "modDate": "2017-01-06 13:13:20.0", 
     "cachettl": "0", 
     "title": "New Early Warnings", 
     "subscribeToListIi": "[email protected]", 
     "inode": "15bd497-1d8e-4bc7-b0f4-c799ed89fdc9", 
     "privacySetting": "public", 
     "__DOTNAME__": "New gTLD Early Warnings", 
     "activityStatus": "Completed", 
     "host": "10b6f94a-7671-4e08-9f4b-27bca80702e7", 
     "languageId": 1, 
     "createNotification": false, 
     "folder": "951ff45c-e844-40d4-904f-92b0d2cd0c3c", 
     "sortOrder": 0, 
     "modUser": "dotcms.org.2897" 
    } 
    ] 
} 


ObjectMapper mapper = new ObjectMapper(); 
Map<String,List<Map<String,String>>> myMap=mapper.readValue(responseStr.getBytes(), new TypeReference<HashMap<String,List<Map<String,String>>>>() {}); 

上記コード正常に動作しているだけにはJSON変化( - エンド出力は

Map<String,List<Map<String,String>>> 

Iジャクソン作業はれるサンプルJSONコードを貼り付けていたタイプのオブジェクトでなければなりません基本的にメタデータタグが追加されます)、マップに変換することはできません。

{ 
    "contentlets": [ 
    { 
     "template": "8f8fab8e-0955-49e1-a2ed-ff45e3296aa8", 
     "modDate": "2017-01-06 13:13:20.0", 
     "cachettl": "0", 
     "title": "New gTLD Early Warnings", 
     "subscribeToListIi": "[email protected]", 
     "inode": "15bd4057-1d8e-4bc7-b0f4-c799ed89fdc9", 
     "metadata": { 
     "author": "jack", 
     "location": "LA" 
     }, 
     "privacySetting": "public", 
     "__DOTNAME__": "New gTLD Early Warnings", 
     "activityStatus": "Completed", 
     "host": "10b6f94a-7671-4e08-9f4b-27bca80702e7", 
     "languageId": 1, 
     "createNotification": false, 
     "folder": "951ff45c-e844-40d4-904f-92b0d2cd0c3c", 
     "sortOrder": 0, 
     "modUser": "dotcms.org.2897" 
    } 
    ] 
}  

答えて

2

これは、メタデータの値のタイプがStringではないためです。それに応じてマップのタイプを変更すると、それは動作します:

Map<String,List<Map<String,Object>>> myMap = mapper.readValue(reader, new TypeReference<HashMap<String,List<Map<String,Object>>>>() {}); 

もちろん、マップの値が同じタイプではないという問題が残っています。必要なデータ構造とそれをどのように処理するかを自分自身に尋ねる必要があります。しかし、json構造をデシリアライズして単純なStringにすることはできません。

+1

Thnxたくさん。私は明らかな間違いをしていることに気付かなかった。再度ありがとう:) – Akshay

関連する問題