上传包含多个文件的JSON数组

Pem*_*ang 7 android json okhttp

我有以下需要上传的json:

[{"key":"value","key1":"value1"},
[{"innerkey":"innervalue","filename":"name"},{"innerkey":"innervalue","filename":"name"}]]
Run Code Online (Sandbox Code Playgroud)

JsonArray中的两个内部键有两个需要上传的文件.

我正在使用okhttp multipart上传它们.

正常字段添加为

multipart.addFormDataPart(key, value);
Run Code Online (Sandbox Code Playgroud)

并添加一个文件

 multipart.addFormDataPart("filename", "image.jpeg", RequestBody.create(MediaType.parse("image/jpeg"), new File(path)));
Run Code Online (Sandbox Code Playgroud)

我之前通过将json转换为hashmap并使用for循环添加部件来上传非嵌套的json

 MultipartBody.Builder multipart = new MultipartBody.Builder();
        for (Map.Entry<String, String> entry : data.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            if(!key.equals("filePath")){
                multipart.addFormDataPart(key, value);

            }else{

                String filename = "";
                String type = MyUtility.getMimeType(key);
                filename = key.substring(key.lastIndexOf("/") + 1);
                multipart.addFormDataPart("fileName", filename, RequestBody.create(MediaType.parse(type), new File(key)));
            }
        }
Run Code Online (Sandbox Code Playgroud)

新结构似乎很难处理我该怎么办?

Mar*_*yan 0

请告诉我你正在寻找这样的东西

    public static Map<String,String> convertToMap(Object yourJsonArrayOrJsonObject) throws Exception
    {
        HashMap<String, String> map = new HashMap<>();
        processJSON(null, yourJsonArrayOrJsonObject, map);
        return map;
    }

    private static void processJSON(String jsonKey, Object jsonItem, Map<String, String> map)
    {
        if (jsonItem instanceof JSONArray)
        {
            JSONArray array = (JSONArray) jsonItem;
            for (Object arrayItem : array)
            {
                processJSON(null, arrayItem, map);
            }
        } else if (jsonItem instanceof JSONObject)
        {
            JSONObject json = (JSONObject) jsonItem;
            Set<String> keys = json.keySet();
            for (String key : keys)
            {
                processJSON(key, json.get(key), map);
            }
        } else
        {
            map.put(jsonKey, String.valueOf(jsonItem));
        }
    }
Run Code Online (Sandbox Code Playgroud)