Skip to content

Commit 798f433

Browse files
author
Kadi Kraman
authored
Merge pull request FormidableLabs#509 from r0b0t3d/parse-response
[Android] parse additional data
2 parents e410851 + f779c47 commit 798f433

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

android/src/main/java/com/rnappauth/utils/MapUtil.java

+77
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package com.rnappauth.utils;
22

3+
import android.util.Log;
4+
35
import androidx.annotation.Nullable;
46

57
import com.facebook.react.bridge.Arguments;
68
import com.facebook.react.bridge.ReadableMap;
79
import com.facebook.react.bridge.ReadableMapKeySetIterator;
10+
import com.facebook.react.bridge.WritableArray;
811
import com.facebook.react.bridge.WritableMap;
12+
import com.facebook.react.bridge.WritableNativeArray;
13+
import com.facebook.react.bridge.WritableNativeMap;
14+
15+
import org.json.JSONArray;
16+
import org.json.JSONException;
17+
import org.json.JSONObject;
918

1019
import java.util.HashMap;
1120
import java.util.Iterator;
@@ -36,10 +45,78 @@ public static final WritableMap createAdditionalParametersMap(Map<String, String
3645

3746
while(iterator.hasNext()) {
3847
String key = iterator.next();
48+
String value = additionalParameters.get(key);
49+
// Try to parse to JSON
50+
try {
51+
JSONObject jsonObject = new JSONObject(value);
52+
WritableMap json = convertJsonToMap(jsonObject);
53+
additionalParametersMap.putMap(key, json);
54+
continue;
55+
} catch (JSONException ignored) {
56+
57+
}
3958
additionalParametersMap.putString(key, additionalParameters.get(key));
4059
}
4160
}
4261

4362
return additionalParametersMap;
4463
}
64+
65+
private static WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {
66+
WritableMap map = new WritableNativeMap();
67+
68+
Iterator<String> iterator = jsonObject.keys();
69+
while (iterator.hasNext()) {
70+
String key = iterator.next();
71+
Object value = jsonObject.get(key);
72+
if (value instanceof JSONObject) {
73+
map.putMap(key, convertJsonToMap((JSONObject) value));
74+
} else if (value instanceof JSONArray) {
75+
map.putArray(key, convertJsonToArray((JSONArray) value));
76+
} else if (value instanceof Boolean) {
77+
map.putBoolean(key, (Boolean) value);
78+
} else if (value instanceof Integer) {
79+
map.putInt(key, (Integer) value);
80+
} else if (value instanceof Double) {
81+
map.putDouble(key, (Double) value);
82+
} else if (value instanceof Float) {
83+
map.putDouble(key, ((Float) value).doubleValue());
84+
} else if (value instanceof Long) {
85+
map.putDouble(key, ((Long) value).doubleValue());
86+
} else if (value instanceof String) {
87+
map.putString(key, (String) value);
88+
} else {
89+
map.putString(key, value.toString());
90+
}
91+
}
92+
return map;
93+
}
94+
95+
private static WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {
96+
WritableArray array = new WritableNativeArray();
97+
98+
for (int i = 0; i < jsonArray.length(); i++) {
99+
Object value = jsonArray.get(i);
100+
if (value instanceof JSONObject) {
101+
array.pushMap(convertJsonToMap((JSONObject) value));
102+
} else if (value instanceof JSONArray) {
103+
array.pushArray(convertJsonToArray((JSONArray) value));
104+
} else if (value instanceof Boolean) {
105+
array.pushBoolean((Boolean) value);
106+
} else if (value instanceof Integer) {
107+
array.pushInt((Integer) value);
108+
} else if (value instanceof Double) {
109+
array.pushDouble((Double) value);
110+
} else if (value instanceof Float) {
111+
array.pushDouble(((Float) value).doubleValue());
112+
} else if (value instanceof Long) {
113+
array.pushDouble(((Long) value).doubleValue());
114+
} else if (value instanceof String) {
115+
array.pushString((String) value);
116+
} else {
117+
array.pushString(value.toString());
118+
}
119+
}
120+
return array;
121+
}
45122
}

0 commit comments

Comments
 (0)