React native 从java向react native发送hashmap

React native 从java向react native发送hashmap,react-native,react-native-android,React Native,React Native Android,我有一个包含 Map我通常将自定义对象转换为json字符串,然后将其解析为writableMap并返回,如下所示 @ReactMethod public void yourBridgeMethod(final ReadableMap argument, final Promise promise) { try { Object x = getMapCustom; final Gson gson =

我有一个包含
Map我通常将自定义对象转换为json字符串,然后将其解析为writableMap并返回,如下所示

@ReactMethod
    public void yourBridgeMethod(final ReadableMap argument, final Promise promise) {

    
try {
                    Object x = getMapCustom;
                    final Gson gson = new Gson();
                    final String response = gson.toJson(x);
                    WritableMap returnMap = this.util.convertJsonToMap(new JSONObject(response));
                    promise.resolve(returnMap);
                } catch (JSONException e) {
                    promise.reject("401", e.getLocalizedMessage());
                }

}
您可以使用此方法创建一个util类来处理转换

    public WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {
        WritableMap map = new WritableNativeMap();

        Iterator<String> iterator = jsonObject.keys();
        while (iterator.hasNext()) {
            String key = iterator.next();
            Object value = jsonObject.get(key);
            if (value instanceof JSONObject) {
                map.putMap(key, convertJsonToMap((JSONObject) value));
            } else if (value instanceof JSONArray) {
                map.putArray(key, convertJsonToArray((JSONArray) value));
                if (("option_values").equals(key)) {
                    map.putArray("options", convertJsonToArray((JSONArray) value));
                }
            } else if (value instanceof Boolean) {
                map.putBoolean(key, (Boolean) value);
            } else if (value instanceof Integer) {
                map.putInt(key, (Integer) value);
            } else if (value instanceof Double) {
                map.putDouble(key, (Double) value);
            } else if (value instanceof String) {
                map.putString(key, (String) value);
            } else {
                map.putString(key, value.toString());
            }
        }
        return map;
    }

    public WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {
        WritableArray array = new WritableNativeArray();

        for (int i = 0; i < jsonArray.length(); i++) {
            Object value = jsonArray.get(i);
            if (value instanceof JSONObject) {
                array.pushMap(this.convertJsonToMap((JSONObject) value));
            } else if (value instanceof JSONArray) {
                array.pushArray(convertJsonToArray((JSONArray) value));
            } else if (value instanceof Boolean) {
                array.pushBoolean((Boolean) value);
            } else if (value instanceof Integer) {
                array.pushInt((Integer) value);
            } else if (value instanceof Double) {
                array.pushDouble((Double) value);
            } else if (value instanceof String) {
                array.pushString((String) value);
            } else {
                array.pushString(value.toString());
            }
        }
        return array;
    }

    public JSONObject convertMapToJson(ReadableMap readableMap) throws JSONException {
        JSONObject object = new JSONObject();
        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
        while (iterator.hasNextKey()) {
            String key = iterator.nextKey();
            switch (readableMap.getType(key)) {
                case Null:
                    object.put(key, JSONObject.NULL);
                    break;
                case Boolean:
                    object.put(key, readableMap.getBoolean(key));
                    break;
                case Number:
                    object.put(key, readableMap.getDouble(key));
                    break;
                case String:
                    object.put(key, readableMap.getString(key));
                    break;
                case Map:
                    object.put(key, convertMapToJson(readableMap.getMap(key)));
                    break;
                case Array:
                    object.put(key, convertArrayToJson(readableMap.getArray(key)));
                    break;
            }
        }
        return object;
    }

    public JSONArray convertArrayToJson(ReadableArray readableArray) throws JSONException {

        JSONArray array = new JSONArray();

        for (int i = 0; i < readableArray.size(); i++) {
            switch (readableArray.getType(i)) {
                case Null:
                    break;
                case Boolean:
                    array.put(readableArray.getBoolean(i));
                    break;
                case Number:
                    array.put(readableArray.getDouble(i));
                    break;
                case String:
                    array.put(readableArray.getString(i));
                    break;
                case Map:
                    array.put(convertMapToJson(readableArray.getMap(i)));
                    break;
                case Array:
                    array.put(convertArrayToJson(readableArray.getArray(i)));
                    break;
            }
        }
        return array;
    }
public writeablemap convertJsonToMap(JSONObject JSONObject)抛出JSONException{
WritableMap=新的WritableNativeMap();
迭代器迭代器=jsonObject.keys();
while(iterator.hasNext()){
String key=iterator.next();
Object value=jsonObject.get(key);
if(JSONObject的值实例){
putMap(key,convertJsonToMap((JSONObject)值));
}else if(JSONArray的值实例){
putArray(key,convertJSONtarray((JSONArray)值));
如果((“选项_值”)。等于(键)){
putArray(“选项”,convertJSONtarray((JSONArray)值));
}
}else if(布尔值实例){
map.putBoolean(键,(布尔)值);
}else if(整数的值实例){
map.putInt(键,(整数)值);
}else if(双精度值实例){
map.putdoull(键,(双)值);
}else if(字符串的值实例){
map.putString(键,(字符串)值);
}否则{
putString(key,value.toString());
}
}
返回图;
}
公共WritableArray convertJsonToArray(JSONArray JSONArray)抛出JSONException{
WritableArray=新的WritableNativeArray();
for(int i=0;i
我通常将自定义对象转换为json字符串,然后将其解析为writableMap并返回,如下所示

@ReactMethod
    public void yourBridgeMethod(final ReadableMap argument, final Promise promise) {

    
try {
                    Object x = getMapCustom;
                    final Gson gson = new Gson();
                    final String response = gson.toJson(x);
                    WritableMap returnMap = this.util.convertJsonToMap(new JSONObject(response));
                    promise.resolve(returnMap);
                } catch (JSONException e) {
                    promise.reject("401", e.getLocalizedMessage());
                }

}
您可以使用此方法创建一个util类来处理转换

    public WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {
        WritableMap map = new WritableNativeMap();

        Iterator<String> iterator = jsonObject.keys();
        while (iterator.hasNext()) {
            String key = iterator.next();
            Object value = jsonObject.get(key);
            if (value instanceof JSONObject) {
                map.putMap(key, convertJsonToMap((JSONObject) value));
            } else if (value instanceof JSONArray) {
                map.putArray(key, convertJsonToArray((JSONArray) value));
                if (("option_values").equals(key)) {
                    map.putArray("options", convertJsonToArray((JSONArray) value));
                }
            } else if (value instanceof Boolean) {
                map.putBoolean(key, (Boolean) value);
            } else if (value instanceof Integer) {
                map.putInt(key, (Integer) value);
            } else if (value instanceof Double) {
                map.putDouble(key, (Double) value);
            } else if (value instanceof String) {
                map.putString(key, (String) value);
            } else {
                map.putString(key, value.toString());
            }
        }
        return map;
    }

    public WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {
        WritableArray array = new WritableNativeArray();

        for (int i = 0; i < jsonArray.length(); i++) {
            Object value = jsonArray.get(i);
            if (value instanceof JSONObject) {
                array.pushMap(this.convertJsonToMap((JSONObject) value));
            } else if (value instanceof JSONArray) {
                array.pushArray(convertJsonToArray((JSONArray) value));
            } else if (value instanceof Boolean) {
                array.pushBoolean((Boolean) value);
            } else if (value instanceof Integer) {
                array.pushInt((Integer) value);
            } else if (value instanceof Double) {
                array.pushDouble((Double) value);
            } else if (value instanceof String) {
                array.pushString((String) value);
            } else {
                array.pushString(value.toString());
            }
        }
        return array;
    }

    public JSONObject convertMapToJson(ReadableMap readableMap) throws JSONException {
        JSONObject object = new JSONObject();
        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
        while (iterator.hasNextKey()) {
            String key = iterator.nextKey();
            switch (readableMap.getType(key)) {
                case Null:
                    object.put(key, JSONObject.NULL);
                    break;
                case Boolean:
                    object.put(key, readableMap.getBoolean(key));
                    break;
                case Number:
                    object.put(key, readableMap.getDouble(key));
                    break;
                case String:
                    object.put(key, readableMap.getString(key));
                    break;
                case Map:
                    object.put(key, convertMapToJson(readableMap.getMap(key)));
                    break;
                case Array:
                    object.put(key, convertArrayToJson(readableMap.getArray(key)));
                    break;
            }
        }
        return object;
    }

    public JSONArray convertArrayToJson(ReadableArray readableArray) throws JSONException {

        JSONArray array = new JSONArray();

        for (int i = 0; i < readableArray.size(); i++) {
            switch (readableArray.getType(i)) {
                case Null:
                    break;
                case Boolean:
                    array.put(readableArray.getBoolean(i));
                    break;
                case Number:
                    array.put(readableArray.getDouble(i));
                    break;
                case String:
                    array.put(readableArray.getString(i));
                    break;
                case Map:
                    array.put(convertMapToJson(readableArray.getMap(i)));
                    break;
                case Array:
                    array.put(convertArrayToJson(readableArray.getArray(i)));
                    break;
            }
        }
        return array;
    }
public writeablemap convertJsonToMap(JSONObject JSONObject)抛出JSONException{
WritableMap=新的WritableNativeMap();
迭代器迭代器=jsonObject.keys();
while(iterator.hasNext()){
String key=iterator.next();
Object value=jsonObject.get(key);
if(JSONObject的值实例){
putMap(key,convertJsonToMap((JSONObject)值));
}else if(JSONArray的值实例){
putArray(key,convertJSONtarray((JSONArray)值));
如果((“选项_值”)。等于(键)){
putArray(“选项”,convertJSONtarray((JSONArray)值));
}
}else if(布尔值实例){
map.putBoolean(键,(布尔)值);
}else if(整数的值实例){
map.putInt(键,(整数)值);
}else if(双精度值实例){
map.putdoull(键,(双)值);
}else if(字符串的值实例){
map.putString(键,(字符串)值);
}否则{