2017-01-16 1 views
1

Ich habe ein Problem, wo einige Struktur der JSON ist behoben, während ein Teil dynamisch ist. Das Ende Ausgang hat ein Objekt vom Typ seinJackson Umwandlung von dynamischen JSON zu Karte

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

Ich bin eine Probe json Code einfügen, für die die jackson Arbeit -

{ 
    "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>>>>() {}); 

Der obige Code funktioniert gut, aber wenn die json Änderungen (im Grunde ein Metadaten-Tag hinzugefügt wird) es ist nicht in der Lage, in Karte zu konvertieren.

{ 
    "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" 
    } 
    ] 
}  

Antwort

2

Dies wird erwartet, da der Typ des Werts der Metadaten kein String ist. Wenn Sie den Typ der Karte entsprechend ändern dann funktioniert es:

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

Natürlich kann man mit dem Problem gelassen werden, die in der Kartenwerte sind nicht von der gleichen Art. Sie müssen sich also fragen, was die gewünschte Datenstruktur ist und wie Sie sie weiterverarbeiten. Allerdings kann man eine JSON-Struktur nicht in eine einfache String deserialisieren.

+1

Thnx viel. Ich bemerkte nicht, dass ich einen offensichtlichen Fehler machte. Nochmals vielen Dank :) – Akshay

Verwandte Themen