diff --git a/android/src/main/java/com/genexus/specific/android/AndroidJSONSerialization.java b/android/src/main/java/com/genexus/specific/android/AndroidJSONSerialization.java index f9622d2cf..5af32f0cc 100644 --- a/android/src/main/java/com/genexus/specific/android/AndroidJSONSerialization.java +++ b/android/src/main/java/com/genexus/specific/android/AndroidJSONSerialization.java @@ -9,6 +9,7 @@ import java.util.Map; public class AndroidJSONSerialization implements IExtensionJSONSerialization { + @Override public Iterator> getJSONObjectIterator(JSONObjectWrapper obj) { Map map = new LinkedHashMap<>(); @@ -24,4 +25,15 @@ public Iterator> getJSONObjectIterator(JSONObjectWrapp public JSONTokener getJSONTokener(String s) { return new AndroidJSONTokenerWrapper(s); } + + @Override + public Map getJSONObjectMap(JSONObjectWrapper obj) { + Map map = new LinkedHashMap<>(); + for (Iterator it = obj.keys(); it.hasNext(); ) { + String k = it.next(); + map.put(k, obj.get(k)); // add key and value to map result + } + return map; + + } } diff --git a/common/src/main/java/com/genexus/common/interfaces/IExtensionJSONSerialization.java b/common/src/main/java/com/genexus/common/interfaces/IExtensionJSONSerialization.java index 5051ab237..3e8bb7833 100644 --- a/common/src/main/java/com/genexus/common/interfaces/IExtensionJSONSerialization.java +++ b/common/src/main/java/com/genexus/common/interfaces/IExtensionJSONSerialization.java @@ -9,4 +9,5 @@ public interface IExtensionJSONSerialization { Iterator> getJSONObjectIterator(JSONObjectWrapper obj); JSONTokener getJSONTokener(String s); + public Map getJSONObjectMap(JSONObjectWrapper obj); } diff --git a/common/src/main/java/com/genexus/json/JSONObjectWrapper.java b/common/src/main/java/com/genexus/json/JSONObjectWrapper.java index 869cdfc29..d17b9fa6f 100644 --- a/common/src/main/java/com/genexus/json/JSONObjectWrapper.java +++ b/common/src/main/java/com/genexus/json/JSONObjectWrapper.java @@ -22,15 +22,12 @@ public JSONObjectWrapper(String string) { ? SpecificImplementation.JsonSerialization.getJSONTokener(string) : new JSONTokenerWrapper(string) ); - - if (map == null) - map = new LinkedHashMap(); + initMap(); } public JSONObjectWrapper(JSONTokenerWrapper token) { super(token); - if (map == null) - map = new LinkedHashMap(); + initMap(); } public JSONObjectWrapper(Map m) { @@ -48,8 +45,18 @@ public JSONObjectWrapper(Map m) { public JSONObjectWrapper(JSONObject jsonObject) { super(jsonObject.toString()); + initMap(); + } + + private void initMap() { if (map == null) - map = new LinkedHashMap(); + { + // this is a workaround for the Android implementation not loading the map in the JsonObject constructor + if (SpecificImplementation.JsonSerialization != null) + map = SpecificImplementation.JsonSerialization.getJSONObjectMap(this); + else + map = new LinkedHashMap(); + } } public Set> entrySet() {