Skip to content

Commit b1ea6e0

Browse files
committed
android: fix parsing json object and json null values
1 parent 16de60f commit b1ea6e0

File tree

2 files changed

+41
-29
lines changed

2 files changed

+41
-29
lines changed

android/src/main/java/com/batch/batch_rn/RNBatchInbox.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,4 @@ private static WritableMap getWritableMapNotification(BatchInboxNotificationCont
7373
output.putBoolean("hasLandingMessage", notification.hasLandingMessage());
7474
return output;
7575
}
76-
77-
private static WritableMap pushPayloadToWritableMap(Map<String, Object> payload)
78-
{
79-
return RNUtils.convertMapToWritableMap(payload);
80-
}
8176
}

android/src/main/java/com/batch/batch_rn/RNUtils.java

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,15 @@ public static WritableMap convertMapToWritableMap(Map<String, Object> input) {
3434
Object value = entry.getValue();
3535
if (value instanceof Map) {
3636
output.putMap(key, convertMapToWritableMap((Map<String, Object>) value));
37-
} else if (value instanceof JSONArray) {
38-
output.putArray(key, convertArrayToWritableArray((Object[]) value));
37+
} else if (value instanceof JSONObject) {
38+
try {
39+
output.putMap(key, convertJSONObjectToWritableMap((JSONObject) value));
40+
} catch (JSONException e) {
41+
Log.e(RNBatchModuleImpl.LOGGER_TAG, "Failed to parse JSON Object.", e);
42+
}
43+
}
44+
else if (value instanceof JSONArray) {
45+
output.putArray(key, convertArrayToWritableArray((JSONArray) value));
3946
} else if (value instanceof Boolean) {
4047
output.putBoolean(key, (Boolean) value);
4148
} else if (value instanceof Integer) {
@@ -48,36 +55,47 @@ public static WritableMap convertMapToWritableMap(Map<String, Object> input) {
4855
output.putDouble(key, ((Date) value).getTime());
4956
} else if (value instanceof URI) {
5057
output.putString(key, value.toString());
58+
} else if (value == null || value == JSONObject.NULL) {
59+
output.putNull(key);
5160
} else {
5261
output.putString(key, value.toString());
5362
}
5463
}
5564
return output;
5665
}
5766

58-
public static WritableArray convertArrayToWritableArray(Object[] input) {
67+
public static WritableArray convertArrayToWritableArray(JSONArray input) {
5968
WritableArray output = new WritableNativeArray();
6069

61-
for (int i = 0; i < input.length; i++) {
62-
Object value = input[i];
63-
if (value instanceof Map) {
64-
output.pushMap(convertMapToWritableMap((Map<String, Object>) value));
65-
} else if (value instanceof JSONArray) {
66-
output.pushArray(convertArrayToWritableArray((Object[]) value));
67-
} else if (value instanceof Boolean) {
68-
output.pushBoolean((Boolean) value);
69-
} else if (value instanceof Integer) {
70-
output.pushInt((Integer) value);
71-
} else if (value instanceof Double) {
72-
output.pushDouble((Double) value);
73-
} else if (value instanceof String) {
74-
output.pushString((String) value);
75-
} else if (value instanceof Date) {
76-
output.pushDouble(((Date) value).getTime());
77-
} else if (value instanceof URI) {
78-
output.pushString(value.toString());
79-
} else {
80-
output.pushString(value.toString());
70+
for (int i = 0; i < input.length(); i++) {
71+
Object value = null;
72+
try {
73+
value = input.get(i);
74+
if (value instanceof Map) {
75+
output.pushMap(convertMapToWritableMap((Map<String, Object>) value));
76+
}
77+
else if (value instanceof JSONObject) {
78+
output.pushMap(convertJSONObjectToWritableMap((JSONObject) value));
79+
}
80+
else if (value instanceof JSONArray) {
81+
output.pushArray(convertArrayToWritableArray((JSONArray) value));
82+
} else if (value instanceof Boolean) {
83+
output.pushBoolean((Boolean) value);
84+
} else if (value instanceof Integer) {
85+
output.pushInt((Integer) value);
86+
} else if (value instanceof Double) {
87+
output.pushDouble((Double) value);
88+
} else if (value instanceof String) {
89+
output.pushString((String) value);
90+
} else if (value instanceof Date) {
91+
output.pushDouble(((Date) value).getTime());
92+
} else if (value instanceof URI) {
93+
output.pushString(value.toString());
94+
} else {
95+
output.pushString(value.toString());
96+
}
97+
} catch (JSONException e) {
98+
Log.e(RNBatchModuleImpl.LOGGER_TAG, "Failed to parse JSON Array.", e);
8199
}
82100
}
83101
return output;
@@ -163,7 +181,6 @@ public static WritableMap convertJSONObjectToWritableMap(JSONObject jsonObject)
163181
Object value = jsonObject.get(key);
164182
map.put(key, value);
165183
}
166-
167184
return convertMapToWritableMap(map);
168185
}
169186
}

0 commit comments

Comments
 (0)