Загрузка массива JSON с несколькими файлами

У меня есть следующий json, который мне нужно загрузить:

[{"key":"value","key1":"value1"},
[{"innerkey":"innervalue","filename":"name"},{"innerkey":"innervalue","filename":"name"}]]

два внутренних ключа, которые находятся внутри JsonArray, имеют два файла, которые необходимо загрузить.

Я использую okhttp multipart для их загрузки.

Обычное поле добавляется как

multipart.addFormDataPart(key, value);

и файл добавляется как

 multipart.addFormDataPart("filename", "image.jpeg", RequestBody.create(MediaType.parse("image/jpeg"), new File(path)));

Я загрузил не вложенный json раньше, преобразовав json в хэш-карту и добавив части, используя цикл for

 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)));
            }
        }

новая структура кажется довольно сложной для обработки, как мне это сделать?

Привет, Итак, вы хотите загрузить несколько файлов с некоторым значением. Правильно?

Pratik Butani 06.02.2019 05:42

да, но это с вложенным json

Pemba Tamang 06.02.2019 05:44

Я не думаю, что такой желаемый формат возможен в методе Многокомпонентный пост, просто представьте, как вы можете поделиться такими данными, используя приложение почтальона. Одним из решений будет передача данные файла как Строка в кодировке Base64 и передача всех данных с использованием необработанного тела запроса.

Jeel Vankhede 06.02.2019 06:12

Проверьте этот ответ stackoverflow.com/a/35866301/10271334, это может помочь в вашем случае.

Jeel Vankhede 06.02.2019 06:25

Я думаю, что это безнадежное дело, может ли кто-нибудь взглянуть на этот вопрос, если это разрешено правилами сообщества, я готов дать награду, если кто-то ответит и на этот вопрос. stackoverflow.com/questions/54529577/…

Pemba Tamang 07.02.2019 15:40

Попробуйте использовать библиотеку Ion, упомянутую в этом ответе stackoverflow.com/questions/31488511/…

Abilash 12.02.2019 07:45
7
6
1 425
1

Ответы 1

Пожалуйста, скажите мне, что вы ищете что-то вроде этого

    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));
        }
    }

Другие вопросы по теме