यदि वास्तविक Map
डेटा संरचना को क्रमबद्ध करने के लिए क्रमशः वास्तविक मूल्य का प्रतिनिधित्व करने के लिए क्रमबद्ध किया जाना उचित है, तो यह शायद एक सभ्य दृष्टिकोण है, जो संभवतः जैक्सन कॉन्फ़िगरेशन की मात्रा को कम करेगा। उदाहरण के लिए, जैक्सन को कॉल करने से पहले, यदि संभव हो तो null
कुंजी प्रविष्टियों को हटा दें। यही कारण है कि ने कहा ...
शून्य मान के साथ Map
प्रविष्टियों serializing को दबाने के लिए:
से पहले जैक्सन 2.9
आप अभी भी WRITE_NULL_MAP_VALUES
का उपयोग कर सकते हैं, लेकिन ध्यान दें कि यह SerializationFeature
में ले जाया गया है:
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
चूंकि
mapper.setDefaultPropertyInclusion(
JsonInclude.Value.construct(Include.ALWAYS, Include.NON_NULL))
शून्य मान के साथ गुण serializing को दबाने के लिए, आप कर सकते हैं configure the ObjectMapper
directly, या @JsonInclude
एनोटेशन का इस्तेमाल करते हैं:
जैक्सन 2,9
WRITE_NULL_MAP_VALUES
हटाई गई है, आप नीचे दिए गए बराबर उपयोग कर सकते हैं
mapper.setSerializationInclusion(Include.NON_NULL);
या:
+०१२३५१६४१०
@JsonInclude(Include.NON_NULL)
class Foo
{
public String bar;
Foo(String bar)
{
this.bar = bar;
}
}
अशक्त Map
कुंजियों को संभालने के लिए कुछ कस्टम क्रमांकन आवश्यक है, सबसे अच्छा के रूप में मैं समझता हूँ।
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
Map<String, Foo> foos = new HashMap<String, Foo>();
foos.put("foo1", new Foo("foo1"));
foos.put("foo2", new Foo(null));
foos.put("foo3", null);
foos.put(null, new Foo("foo4"));
// System.out.println(new ObjectMapper().writeValueAsString(foos));
// Exception: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.getSerializerProvider().setNullKeySerializer(new MyNullKeySerializer());
System.out.println(mapper.writeValueAsString(foos));
// output:
// {"":{"bar":"foo4"},"foo2":{},"foo1":{"bar":"foo1"}}
}
}
class MyNullKeySerializer extends JsonSerializer<Object>
{
@Override
public void serialize(Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused)
throws IOException, JsonProcessingException
{
jsonGenerator.writeFieldName("");
}
}
class Foo
{
public String bar;
Foo(String bar)
{
this.bar = bar;
}
}
null
चाबियाँ, आगे कस्टम क्रमांकन प्रसंस्करण के लिए आवश्यक हो जाएगा के साथ Map
प्रविष्टियों serializing को दबाने के लिए:
एक साधारण दृष्टिकोण रिक्त स्ट्रिंग (दो जैसा कि पहले उल्लेख विन्यास की पूरी उदाहरण सहित) के रूप में null
कुंजी क्रमानुसार करने।
संभावित डुप्लिकेट, कृपया इस लिंक को देखें: http://stackoverflow.com/questions/3140563/how-to-avoi डी-नल-वैल्यू-सीरियलाइजेशन-इन-हैशमप – dbf
मानचित्र में लगभग एक शून्य कुंजी – amicngh
@ डीबीएफ नहीं हो सकती है। कृपया संपादित प्रश्न शीर्षक फिर से देखें। – Inquisitive