JSON convert Map with Integer keys

10,912

Like @HotLicks said, when you convert objects to JSON, the key part of the JSON map will be returned as a String. I don't believe there's any way to move around this behavior. I'd also steer clear of using integers as keys in your map, if the intended behavior is as a JSON map. Instead, I'd do something like:

map.put("identifier", 1);
map.put("value", "sample");

It's a little bit more verbose, but it's also easier to see how that translates to JSON.

Share:
10,912
Georgios Stathis
Author by

Georgios Stathis

Nothing is impossible, it only takes effort and time. But who can spend endlessly any of them?

Updated on July 09, 2022

Comments

  • Georgios Stathis
    Georgios Stathis almost 2 years

    I have a small sample of test code where I try to convert a Map into a JSON string and back. While parsing from the JSON string, the resulting map contains the String key "1" instead of the Integer key "1", thus making the test fail. The same happens with POJOs used as the key to this map. Is this behaviour expected or have I ommited some configuration for the JSON converters?

    public class SampleConverterTest {
    
       @Test
       public void testIntegerKey() {
    
          // Register an Integer converter
          JSON.registerConvertor(Integer.class, new JSONPojoConvertor(Integer.class));
    
          Map<Integer, String> map = new HashMap<Integer, String>();
          map.put(1, "sample");
          // Convert to JSON
          String msg = JSON.toString(map);
          // Retrieve original map from JSON
          @SuppressWarnings("unchecked")
          Map<Integer, String> obj = (Map<Integer, String>) JSON.parse(msg);
    
          assertTrue(obj.containsKey(1));
       }
    }
    

    I am using jetty-util 7.6.10.v20130312

  • Georgios Stathis
    Georgios Stathis over 10 years
    Thanks Jason and the other guys for clarifying what the JSON can support and what not.