{"id":995,"date":"2020-04-07T20:38:37","date_gmt":"2020-04-07T20:38:37","guid":{"rendered":"https:\/\/jan.schnasse.org\/blog\/?p=995"},"modified":"2026-09-28T11:38:46","modified_gmt":"2026-09-28T09:38:46","slug":"java-simple-serializing-of-maps-as-json","status":"publish","type":"post","link":"https:\/\/jan.schnasse.org\/blog\/2020\/04\/07\/java-simple-serializing-of-maps-as-json\/","title":{"rendered":"Java: Simple Read\/Write of Maps as Json"},"content":{"rendered":"<div class=\"post-text\">\n<p>You can use tools like <a href=\"https:\/\/mvnrepository.com\/artifact\/com.fasterxml.jackson.core\/jackson-databind\/2.9.7\" rel=\"nofollow noreferrer\">Jackson<\/a> to serialize and deserialize maps to json an vice versa.<\/p>\n<p><strong>Example<\/strong><\/p>\n<pre class=\"lang-java prettyprint prettyprinted\"><code><span class=\"lit\">@Test<\/span>\n<span class=\"kwd\">public<\/span> <span class=\"kwd\">void<\/span><span class=\"pln\"> loadMapFromFileAndSaveIt<\/span><span class=\"pun\">(){<\/span>\n    <span class=\"typ\">Map<\/span><span class=\"pun\">&lt;<\/span><span class=\"typ\">Object<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">Object<\/span><span class=\"pun\">&gt;<\/span><span class=\"pln\"> map <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> loadMap<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"map.json\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n    map<\/span><span class=\"pun\">.<\/span><span class=\"pln\">put<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"8\"<\/span><span class=\"pun\">,<\/span> <span class=\"str\">\"8th\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n    map<\/span><span class=\"pun\">.<\/span><span class=\"pln\">remove<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"7\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n    saveMap<\/span><span class=\"pun\">(<\/span><span class=\"pln\">map<\/span><span class=\"pun\">,<\/span><span class=\"str\">\"\/path\/to\/map2.txt\"<\/span><span class=\"pun\">);<\/span>\n<span class=\"pun\">}<\/span>\n\n<span class=\"kwd\">private<\/span> <span class=\"typ\">Map<\/span><span class=\"pun\">&lt;<\/span><span class=\"typ\">Object<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">Object<\/span><span class=\"pun\">&gt;<\/span><span class=\"pln\"> loadMap<\/span><span class=\"pun\">(<\/span><span class=\"typ\">String<\/span><span class=\"pln\"> string<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n    <span class=\"typ\">ObjectMapper<\/span><span class=\"pln\"> mapper <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">ObjectMapper<\/span><span class=\"pun\">(); \/\/should be initialized outside!<\/span>\n    <span class=\"kwd\">try<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">InputStream<\/span><span class=\"pln\"> in <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">Thread<\/span><span class=\"pun\">.<\/span><span class=\"pln\">currentThread<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getContextClassLoader<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getResourceAsStream<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"map.json\"<\/span><span class=\"pun\">))<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">return<\/span><span class=\"pln\"> mapper<\/span><span class=\"pun\">.<\/span><span class=\"pln\">readValue<\/span><span class=\"pun\">(<\/span><span class=\"pln\">in<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">HashMap<\/span><span class=\"pun\">.<\/span><span class=\"kwd\">class<\/span><span class=\"pun\">);<\/span>\n    <span class=\"pun\">}<\/span><span class=\"kwd\">catch<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">Exception<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">throw<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">RuntimeException<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">);<\/span>\n    <span class=\"pun\">}<\/span>\n<span class=\"pun\">}<\/span>\n\n<span class=\"kwd\">private<\/span> <span class=\"kwd\">void<\/span><span class=\"pln\"> saveMap<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Map<\/span><span class=\"pun\">&lt;<\/span><span class=\"typ\">Object<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">Object<\/span><span class=\"pun\">&gt;<\/span><span class=\"pln\"> map<\/span><span class=\"pun\">,<\/span><span class=\"typ\">String<\/span><span class=\"pln\"> path<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n    <span class=\"kwd\">try<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">PrintWriter<\/span><span class=\"pln\"> out <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">PrintWriter<\/span><span class=\"pun\">(<\/span><span class=\"pln\">path<\/span><span class=\"pun\">))<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        out<\/span><span class=\"pun\">.<\/span><span class=\"pln\">println<\/span><span class=\"pun\">(<\/span><span class=\"pln\">toString<\/span><span class=\"pun\">(<\/span><span class=\"pln\">map<\/span><span class=\"pun\">));<\/span>\n    <span class=\"pun\">}<\/span> <span class=\"kwd\">catch<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">Exception<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">throw<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">RuntimeException<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">);<\/span>\n    <span class=\"pun\">}<\/span>\n<span class=\"pun\">}<\/span>\n\n<span class=\"kwd\">public<\/span> <span class=\"typ\">String<\/span><span class=\"pln\"> toString<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Object<\/span><span class=\"pln\"> obj<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n    <span class=\"kwd\">try<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">StringWriter<\/span><span class=\"pln\"> w <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">StringWriter<\/span><span class=\"pun\">();)<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">new<\/span> <span class=\"typ\">ObjectMapper<\/span><span class=\"pun\">().<\/span><span class=\"pln\">configure<\/span><span class=\"pun\">(<\/span><span class=\"typ\">SerializationFeature<\/span><span class=\"pun\">.<\/span><span class=\"pln\">INDENT_OUTPUT<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">).<\/span><span class=\"pln\">writeValue<\/span><span class=\"pun\">(<\/span><span class=\"pln\">w<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> obj<\/span><span class=\"pun\">);<\/span>\n        <span class=\"kwd\">return<\/span><span class=\"pln\"> w<\/span><span class=\"pun\">.<\/span><span class=\"pln\">toString<\/span><span class=\"pun\">();<\/span>\n    <span class=\"pun\">}<\/span> <span class=\"kwd\">catch<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">Exception<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">throw<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">RuntimeException<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">);<\/span>\n    <span class=\"pun\">}<\/span>\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>If the file <code>map.json<\/code> on your classpath contains<\/p>\n<pre class=\"lang-java prettyprint prettyprinted\"><code><span class=\"pun\">{<\/span>\n <span class=\"str\">\"1\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"1th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"2\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"2th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"3\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"3th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"4\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"4th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"5\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"5th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"6\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"6th\"<\/span><span class=\"pun\">,<\/span>\n <span class=\"str\">\"7\"<\/span><span class=\"pun\">:<\/span><span class=\"str\">\"7th\"<\/span>\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>The code above will modify it and writes it to a file <code>\/path\/to\/map2.txt<\/code> that will contain the modified map.<\/p>\n<pre class=\"lang-java prettyprint prettyprinted\"><code><span class=\"pun\">{<\/span>\n  <span class=\"str\">\"1\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"1th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"2\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"2th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"3\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"3th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"4\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"4th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"5\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"5th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"6\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"6th\"<\/span><span class=\"pun\">,<\/span>\n  <span class=\"str\">\"8\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"8th\"<\/span>\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<\/div>\n<div class=\"grid mb0 fw-wrap ai-start jc-end gs8 gsy\">\n<p>&nbsp;<\/p>\n<div class=\"grid--cell mr16\">\n<div class=\"post-menu\"><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>You can use tools like Jackson to serialize and deserialize maps to json an vice versa. Example @Test public void loadMapFromFileAndSaveIt(){ Map&lt;Object, Object&gt; map = loadMap(&#8222;map.json&#8220;); map.put(&#8222;8&#8220;, &#8222;8th&#8220;); map.remove(&#8222;7&#8243;); saveMap(map,&#8220;\/path\/to\/map2.txt&#8220;); } private Map&lt;Object, Object&gt; loadMap(String string) { ObjectMapper mapper = new ObjectMapper(); \/\/should be initialized outside! try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(&#8222;map.json&#8220;)) { return mapper.readValue(in, HashMap.class); [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,9],"tags":[],"class_list":["post-995","post","type-post","status-publish","format-standard","hentry","category-development","category-java"],"_links":{"self":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts\/995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/comments?post=995"}],"version-history":[{"count":1,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts\/995\/revisions"}],"predecessor-version":[{"id":4199,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts\/995\/revisions\/4199"}],"wp:attachment":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/media?parent=995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/categories?post=995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/tags?post=995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}