JSON Volley PUT запрос перекрывает все - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь обновить удаленные значения JSON, используя Volley для Android. Проблема в том, что приведенный ниже код полностью переопределяет весь объект JSON.

Файл находится здесь: https://api.myjson.com/bins/kubxi

Исходный файл JSON выглядит следующим образом:

{
  "females": [
    {
      "id": 1,
      "name": "Name One",
      "actions": [
        {
          "action_1": 1,
          "action_2": 2,
          "action_3": 3
        }
      ]
    },
    {
      "id": 2,
      "name": "Name Two",
      "actions": [
        {
          "action_1": 4,
          "action_2": 5,
          "action_3": 6
        }
      ]
    }
  ]
}

Java-код

private void sendRequest() {
        RequestQueue queue = Volley.newRequestQueue(this);
        final JSONObject jsonObject = new JSONObject();
        String url ="https://api.myjson.com/bins/kubxi"; // Remote JSON file

        try {
            jsonObject.put("action_1", 123);
            jsonObject.put("action_2", 456);
            jsonObject.put("action_3", 789);
        } catch (JSONException e) {
            Log.d("Exception", e.toString());
        }

        JsonObjectRequest putRequest = new JsonObjectRequest(Request.Method.PUT, url, jsonObject,
                new Response.Listener<JSONObject>()
                {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("Response", response.toString());
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("Error.Response", error.toString());
                    }
                }
        )
        {
            @Override
            public Map<String, String> getHeaders()
            {
                Map<String, String> headers = new HashMap<>();
                headers.put("Accept", "application/json");
                headers.put("Content-Type", "application/json");
                return headers;
            }

            @Override
            public byte[] getBody() {

                try {
                    Log.i("JSON", jsonObject.toString());
                    return jsonObject.toString().getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                return null;
            }
        };
        queue.add(putRequest);
}

После использования этого кода файл JSON выглядит следующим образом:

{
    "action_1": 123,
    "action_2": 456,
    "action_3": 789
}

Я ожидал, что код обновит только значения в action_1, action_2 и action_3 с 1, 2, 3 до 123, 456, 789.

Я хочу, чтобы файл JSON выглядел так после выполнения кода:

{
  "females": [
    {
      "id": 1,
      "name": "Name One",
      "actions": [
        {
          "action_1": 123,
          "action_2": 456,
          "action_3": 789
        }
      ]
    },
    {
      "id": 2,
      "name": "Name Two",
      "actions": [
        {
          "action_1": 123,
          "action_2": 456,
          "action_3": 789
        }
      ]
    }
  ]
}

Предложения будут оценены!

1 Ответ

1 голос
/ 05 марта 2019

Чтобы обновить определенное значение в файле json, вы можете сделать так:

Сначала введите original json в строке:

  String jsonString ="{
  "females": [
    {
      "id": 1,
      "name": "Name One",
      "actions": [
        {
          "action_1": 1,
          "action_2": 2,
          "action_3": 3
        }
      ]
    }
  ]
}";

Далее, передайте эту строку в JsonObject:

   JSONObject jObject  = new JSONObject(jsonString);//passing string to jsonobject
         JSONArray jsonArray = jObject.getJSONArray("females");
        for (int i = 0; i < jsonArray.length(); i++) {
         JSONObject object = jsonArray.getJSONObject(i);
         JSONArray jsonObject= object.getJSONArray("actions"); //getting action 
array
       for (int j = 0; j < jsonObject.length(); j++) {
         JSONObject object1 = jsonObject.getJSONObject(j);

           object1.put("action_1", 123); //here you are putting value to action_1
                    object1.put("action_2", 456);
                    object1.put("action_3", 789);
        }
        } 

и затем отправьте это jsonObject на ваш сервер.

...