Search code examples
javagwt

How to convert Elemental2 JsObject to Map<String, String>?


Looking for a way to convert Elemental2 JsObject to Map<String, String>:

import elemental2.core.JsObject;

public static Map<String, String> jsObjectToMap(JsObject obj) {
    // code in question
}

Is there a more efficient way that just iterating and creating a new map (I'll post that as my own answer)?


Solution

  • Using simple iteration and copying:

    import elemental2.core.JsObject;
    import jsinterop.base.Js;
    import jsinterop.base.JsPropertyMap;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public static Map<String, String> jsObjectToMap(JsObject obj) {
        Map<String, String> result = new LinkedHashMap<>();
        JsPropertyMap<Object> propMap = Js.asPropertyMap(obj);
        propMap.forEach(key -> {
            result.put(key, Objects.toString(propMap.get(key)));
        });
        return result;
    }