के साथ कस्टम JSON Deserialization मैं Flickr API का उपयोग कर रहा हूं। जब flickr.test.login
विधि बुला, डिफ़ॉल्ट JSON परिणाम है:जैक्सन
{
"user": {
"id": "[email protected]",
"username": {
"_content": "jamalfanaian"
}
},
"stat": "ok"
}
मैं एक जावा वस्तु में इस प्रतिक्रिया को पार्स करना चाहते हैं:
public class FlickrAccount {
private String id;
private String username;
// ... getter & setter ...
}
JSON गुण इस तरह मैप किया जाना चाहिए:
"user" -> "id" ==> FlickrAccount.id
"user" -> "username" -> "_content" ==> FlickrAccount.username
दुर्भाग्य से, मैं एनोटेशन का उपयोग करके ऐसा करने के लिए एक अच्छा, सुरुचिपूर्ण तरीका नहीं ढूंढ पा रहा हूं। मेरा दृष्टिकोण अब तक है, JSON स्ट्रिंग को Map<String, Object>
में पढ़ने और वहां से मूल्य प्राप्त करने के लिए।
Map<String, Object> value = new ObjectMapper().readValue(response.getStream(),
new TypeReference<HashMap<String, Object>>() {
});
@SuppressWarnings("unchecked")
Map<String, Object> user = (Map<String, Object>) value.get("user");
String id = (String) user.get("id");
@SuppressWarnings("unchecked")
String username = (String) ((Map<String, Object>) user.get("username")).get("_content");
FlickrAccount account = new FlickrAccount();
account.setId(id);
account.setUsername(username);
लेकिन मुझे लगता है, यह अब तक का सबसे गैर-सुरुचिपूर्ण तरीका है। क्या कोई आसान तरीका है, या तो एनोटेशन या कस्टम Deserializer का उपयोग कर?
यह मेरे लिए बहुत स्पष्ट हो सकता है, लेकिन निश्चित रूप से यह काम नहीं करता:
public class FlickrAccount {
@JsonProperty("user.id") private String id;
@JsonProperty("user.username._content") private String username;
// ... getter and setter ...
}
धन्यवाद। जिस भाग में मैं लापता था वह एनोटेशन था। ऑब्जेक्ट में पंजीकृत किसी प्रकार के उप-वर्ग होने के बावजूद मुझे @JsonDeserialize एनोटेशन की आपूर्ति करना पड़ा। – th3morg