/ / GSON: फ़ील्ड्स को मूल ऑब्जेक्ट में कैसे ले जाया जाए - जावा, json, gson

जीएसओएन: फ़ील्ड को मूल ऑब्जेक्ट में कैसे स्थानांतरित करें - जावा, जेसन, जीसन

मैं उपयोग कर रहा हूँ Google GSON मेरे जावा ऑब्जेक्ट को JSON में बदलने के लिए।

वर्तमान में मैं निम्नलिखित संरचना कर रहा हूँ:

"Step": {
"start_name": "Start",
"end_name": "End",
"data": {
"duration": {
"value": 292,
"text": "4 min."
},
"distance": {
"value": 1009.0,
"text": "1 km"
},
"location": {
"lat": 59.0000,
"lng": 9.0000,
"alt": 0.0
}
}
}

वर्तमान में ए Duration वस्तु एक अंदर है Data वस्तु। मैं इसे छोड़ना चाहूंगा Data वस्तु और चाल Duration ऑब्जेक्ट Step वस्तु, इस तरह:

"Step": {
"start_name": "Start",
"end_name": "End",
"duration": {
"value": 292,
"text": "4 min."
},
"distance": {
"value": 1009.0,
"text": "1 km"
},
"location": {
"lat": 59.0000,
"lng": 9.0000,
"alt": 0.0
}
}

मैं GSON का उपयोग कैसे कर सकता हूं?

संपादित करें: मैंने "Step.class को संशोधित करने के लिए एक TypeAdapter का उपयोग करने की कोशिश की है, लेकिन राइट-मेथड में I" JSONWriter में अपनी अवधि ऑब्जेक्ट जोड़ने में सक्षम नहीं है।

उत्तर:

जवाब के लिए 3 № 1

आप शायद लिखकर ऐसा कर सकते हैं, और फिर पंजीकरण कर सकते हैं कस्टम धारावाहिक के लिये Step, और यह सुनिश्चित करें कि आप इसके साथ काम करते हैं Duration के बजाय, आदि Data.

// registering your custom serializer:
GsonBuilder builder = new GsonBuilder ();
builder.registerTypeAdapter (Step.class, new StepSerializer ());
Gson gson = builder.create ();
// now use "gson" to do all the work

नीचे दिए गए कस्टम धारावाहिक के लिए कोड, मैं अपने सिर के ऊपर से लिख रहा हूं। यह अपवाद को संभालने से चूक जाता है, और संकलन नहीं कर सकता है, और धीमी गति जैसी चीजें करता है Gson बार-बार। लेकिन यह प्रतिनिधित्व करता है इस तरह की चीज़ आप "करना चाहते हैं:

class StepSerializer implements JsonSerializer<Step>
{
public JsonElement serialize (Step src,
Type typeOfSrc,
JsonSerializationContext context)
{
Gson gson = new Gson ();
/* Whenever Step is serialized,
serialize the contained Data correctly.  */
JsonObject step = new JsonObject ();
step.add ("start_name", gson.toJsonTree (src.start_name);
step.add ("end_name",   gson.toJsonTree (src.end_name);

/* Notice how I"m digging 2 levels deep into "data." but adding
JSON elements 1 level deep into "step" itself.  */
step.add ("duration",   gson.toJsonTree (src.data.duration);
step.add ("distance",   gson.toJsonTree (src.data.distance);
step.add ("location",   gson.toJsonTree (src.data.location);

return step;
}
}

जवाब के लिए 0 № 2

मुझे लगता है कि यह सुंदर तरीके से इसे करने के लिए नहीं है। शायद हो सकता है कि प्रारंभिक ऑब्जेक्ट्स से जावा ऑब्जेक्ट (मानचित्र) प्राप्त करें, डेटा हटाएं, अवधि डालें और json को क्रमबद्ध करें:

Map initial = gson.fromJson(initialJson);

// Replace data with duration in this map
Map converted = ...

String convertedJson = gson.toJson(converted);