Skip to content

Commit 035cdc2

Browse files
mrodbratschiBeta Bot
authored andcommitted
Cherry pick branch 'genexuslabs:fix/duplicated-fields-log' into beta
1 parent fcc5ac4 commit 035cdc2

File tree

1 file changed

+49
-30
lines changed

1 file changed

+49
-30
lines changed

gamutils/src/main/java/com/genexus/gam/utils/Dictionary.java

Lines changed: 49 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -87,40 +87,59 @@ private Map<String, Object> jsonStringToMap(String jsonString) {
8787
return this.gson.fromJson(jsonString, type);
8888
}
8989

90-
private void objectToMap(String key, Object value) {
91-
if (value == null) {
92-
this.userMap.put(key, null);
93-
} else if (value instanceof Number || value instanceof Boolean || value instanceof Map || value instanceof List) {
94-
this.userMap.put(key, value);
95-
} else if (value instanceof GxUserType) {
96-
this.userMap.put(key, jsonStringToMap(((GxUserType) value).toJSonString()));
97-
} else if (value instanceof String) {
98-
String str = (String) value;
99-
100-
// Try to parse as JSON
90+
private Object deepConvert(Object value) {
91+
if (value == null) return null;
92+
93+
if (value instanceof Number || value instanceof Boolean) {
94+
return value;
95+
}
96+
97+
if (value instanceof String) {
10198
try {
102-
JsonElement parsed = JsonParser.parseString(str);
99+
JsonElement parsed = JsonParser.parseString((String) value);
103100
if (parsed.isJsonObject()) {
104-
this.userMap.put(key, this.gson.fromJson(parsed, Map.class));
105-
} else if (parsed.isJsonArray()) {
106-
this.userMap.put(key, this.gson.fromJson(parsed, List.class));
107-
} else if (parsed.isJsonPrimitive()) {
108-
JsonPrimitive primitive = parsed.getAsJsonPrimitive();
109-
if (primitive.isBoolean()) {
110-
this.userMap.put(key, primitive.getAsBoolean());
111-
} else if (primitive.isNumber()) {
112-
this.userMap.put(key, primitive.getAsNumber());
113-
} else if (primitive.isString()) {
114-
this.userMap.put(key, primitive.getAsString());
115-
}
101+
return gson.fromJson(parsed, Map.class);
116102
}
117-
} catch (JsonSyntaxException e) {
118-
// Invalid JSON: it is left as string
119-
this.userMap.put(key, str);
103+
if (parsed.isJsonArray()) {
104+
return gson.fromJson(parsed, List.class);
105+
}
106+
return ((JsonPrimitive) parsed).getAsString();
107+
} catch (Exception e) {
108+
return value;
120109
}
121-
} else {
122-
// Any other object: it is converted to string
123-
this.userMap.put(key, value.toString());
124110
}
111+
112+
// SDT => Map
113+
if (value instanceof GxUserType) {
114+
String s = ((GxUserType) value).toJSonString();
115+
return jsonStringToMap(s);
116+
}
117+
118+
// Map => deep convert values
119+
if (value instanceof Map) {
120+
Map<String,Object> newMap = new LinkedHashMap<>();
121+
((Map<?,?>) value).forEach((k,v) -> newMap.put(k.toString(), deepConvert(v)));
122+
return newMap;
123+
}
124+
125+
// List => deep convert each element
126+
if (value instanceof List) {
127+
List<Object> newList = new java.util.ArrayList<>();
128+
for (Object o : (List<?>) value) newList.add(deepConvert(o));
129+
return newList;
130+
}
131+
132+
// Catch: JSONObjectWrapper
133+
if (value.getClass().getName().contains("JSONObjectWrapper") ||
134+
value instanceof org.json.JSONObject) {
135+
// Convert org.json to Map
136+
return jsonStringToMap(value.toString());
137+
}
138+
139+
return value.toString();
140+
}
141+
142+
private void objectToMap(String key, Object value) {
143+
this.userMap.put(key, deepConvert(value));
125144
}
126145
}

0 commit comments

Comments
 (0)