জ্যাকসন ব্যবহার করে যখন বস্তুটি (ডি) সিরিয়ালযুক্ত করা হচ্ছে তখন আমি জাভা অবজেক্টের মধ্যে কাঁচা জেএসএনকে অন্তর্ভুক্ত করার চেষ্টা করছি। এই কার্যকারিতাটি পরীক্ষা করার জন্য, আমি নিম্নলিখিত পরীক্ষাটি লিখেছি:
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 হ'ল আমি কীভাবে জিনিসগুলি দেখতে চাই। দুর্ভাগ্যক্রমে, জেএসএনকে আবার অবজেক্টে পড়ার চেষ্টা করার সময় কোডটি একটি ব্যতিক্রম সহ ব্যর্থ হয়। ব্যতিক্রম এখানে:
org.codehaus.jackson.map.JsonMappingException: java.lang.String এর উদাহরণটি deOrialize করতে পারে না [সূত্র: java.io.StringReader@d70d7a এ START_OBJECT টোকেনের বাইরে; লাইন: 1, কলাম: 13] (রেফারেন্স চেইনের মাধ্যমে: com.tnal.prism.cobalt.gather.testing.Pojo ["বার"])
জ্যাকসন কেন এক দিক থেকে ঠিকঠাকভাবে কাজ করে কিন্তু অন্য দিকে যাওয়ার সময় ব্যর্থ হয়? দেখে মনে হচ্ছে এটি আবার ইনপুট হিসাবে নিজস্ব আউটপুট নিতে সক্ষম হবে। আমি জানি যে আমি যা করার চেষ্টা করছি তা অপ্রথাবাদী (সাধারণ পরামর্শ bar
যার মধ্যে একটি সম্পত্তি নামে একটি অভ্যন্তরীণ বস্তু তৈরি করা হয় A
), তবে আমি এই জেএসএনের সাথে কোনওভাবেই যোগাযোগ করতে চাই না। আমার কোডটি এই কোডটির পাস-থ্রো হিসাবে কাজ করছে - আমি এই JSON এ নিয়ে কোনও জিনিস স্পর্শ না করে এটিকে আবার ফেরত পাঠাতে চাই, কারণ যখন JSON পরিবর্তন হয় তখন আমি চাই না যে আমার কোডটিতে পরিবর্তন দরকার।
পরামর্শের জন্য ধন্যবাদ.
সম্পাদনা: পোজোকে একটি স্ট্যাটিক ক্লাস তৈরি করা হয়েছে, যা একটি পৃথক ত্রুটি ঘটছিল।