मैं एक जावा ऑब्जेक्ट के अंदर कच्चे जेन्सन को शामिल करने की कोशिश कर रहा हूं जब ऑब्जेक्ट जैक्सन का उपयोग करके अनुक्रमित (डी) है। इस कार्यक्षमता का परीक्षण करने के लिए, मैंने निम्नलिखित परीक्षण लिखा:
public static class Pojo {
public String foo;
@JsonRawValue
public String bar;
}
@Test
public void test() throws JsonGenerationException, JsonMappingException, IOException {
String foo = "one";
String bar = "{\"A\":false}";
Pojo pojo = new Pojo();
pojo.foo = foo;
pojo.bar = bar;
String json = "{\"foo\":\"" + foo + "\",\"bar\":" + bar + "}";
ObjectMapper objectMapper = new ObjectMapper();
String output = objectMapper.writeValueAsString(pojo);
System.out.println(output);
assertEquals(json, output);
Pojo deserialized = objectMapper.readValue(output, Pojo.class);
assertEquals(foo, deserialized.foo);
assertEquals(bar, deserialized.bar);
}
कोड निम्न पंक्ति आउटपुट करता है:
{"foo":"one","bar":{"A":false}}
JSON बिल्कुल है कि मैं चीजों को कैसे देखना चाहता हूं। दुर्भाग्यवश, JSON को ऑब्जेक्ट पर वापस पढ़ने का प्रयास करते समय कोड एक अपवाद के साथ विफल हो जाता है। यहाँ अपवाद है:
org.codehaus.jackson.map.JsonMappingException: java.lang की आवृत्ति का वर्णन नहीं कर सकता। पंक्ति: 1, कॉलम: 13] (संदर्भ श्रृंखला के माध्यम से: com.tnal.prism.cobalt.gather.testing.Pojo ["बार"])
जैक्सन एक दिशा में क्यों ठीक काम करता है लेकिन दूसरी दिशा में जाने पर असफल हो जाता है? ऐसा लगता है कि इसे इनपुट के रूप में फिर से अपना आउटपुट लेने में सक्षम होना चाहिए। मुझे पता है कि मैं जो करने की कोशिश कर रहा हूं वह अपरंपरागत है (सामान्य सलाह यह है bar
कि उसके पास एक आंतरिक वस्तु है जिसके नाम एक संपत्ति है A
), लेकिन मैं इस JSON के साथ बिल्कुल भी बातचीत नहीं करना चाहता। मेरा कोड इस कोड के लिए एक पास-थ्रू के रूप में काम कर रहा है - मैं इस JSON में लेना चाहता हूं और किसी चीज़ को छूने के बिना इसे फिर से वापस भेजना चाहता हूं, क्योंकि जब JSON बदलता है तो मैं नहीं चाहता कि मेरे कोड में संशोधनों की आवश्यकता हो।
सलाह के लिए धन्यवाद।
संपादित करें: पूजो को एक स्थिर वर्ग बनाया, जो एक अलग त्रुटि पैदा कर रहा था।