0

I am developing a java application in android studio and a Rest web server in java, netbeans.

I need to send a JSON to the server ... I did the whole engine the webService and tested it using Postman.

The Json used was this:

{
    "id":0,
    "ticket":"2132158645161654561651616",
    "avaliacoes":[
        {
        "idAvaliacao":1,
        "nota":5,
        "observacao":"testeTEste"
        },
        {
        "idAvaliacao":2,
        "nota":4,
        "observacao":"testeTEste"
        }
    ]
}

Worked perfectly.

So I went to generate Json dynamically in the application:

public void enviaDadosVenda(){
        JSONObject obj = new JSONObject();
        JSONArray avaliacoes = new JSONArray();
        JSONObject avaliacao;

        try {
            obj.put("id", 0);
            obj.put("ticket", PrincipalActivity.ticket_id);

            for(int i=0; i < PrincipalActivity.listAval.size();i++){
                avaliacao = new JSONObject();
                avaliacao.put("idAvaliacao", listAval.get(i).getId());
                avaliacao.put("nota", listAval.get(i).getNota());
                avaliacao.put("observacao", listAval.get(i).getObservacoes());
                avaliacoes.add(avaliacao);

            }

            obj.put("avaliacoes", avaliacoes);

        } catch (JSONException e) {
            e.printStackTrace();
        }
}

The generated Json is this:

{
    "id":0,
    "ticket":"2132158645161654561651616",
    "avaliacoes":"[
        {
            \"idAvaliacao\":1,
            \"nota\":5,
            \"observacao\":\"testeTEste\"
        },
        {
            \"idAvaliacao\":2,
            \"nota\":4,\"observacao\":\"testeTEste\"
        }
    ]"
}

If I use this second Json on Postman the webService no gets it correctly.

Get the id and the ticket, but the evaluations array gets a single item(avaliacoes.get(0)) = null.

I've looked at other posts about Json and ArrayJsons and nothing helped me ...

Parsing JSON Object in Java

Convert JsonObject to String

How to create correct JSONArray in Java using JSONObject

https://pt.stackoverflow.com/questions/140442/reconhecer-um-jsonobject-ou-jsonarray

  • Use Gson Library to generate json. – Rajnish suryavanshi Sep 05 '19 at 21:00
  • Is this referencing `org.json.JSONArray` from Android? If so, would it not be `avaliacoes.put(avaliacao);` instead of `.add`? It appears your JSONArray is being treated as a String (instead of the correct org.json.JSONArray) and be serialized improperly – Cruceo Sep 05 '19 at 21:15

1 Answers1

1

Just replace avaliacoes.add(avaliacao); with avaliacoes.put(avaliacao);

public void enviaDadosVenda(){
        JSONObject obj = new JSONObject();
        JSONArray avaliacoes = new JSONArray();
        JSONObject avaliacao;

        try {
            obj.put("id", 0);
            obj.put("ticket", "DemoActivity.ticket_id");

            for(int i=0; i < 2;i++){
                avaliacao = new JSONObject();
                avaliacao.put("idAvaliacao", "1");
                avaliacao.put("nota", "nota");
                avaliacao.put("observacao", "observacao");
                avaliacoes.put(avaliacao);

            }
            obj.put("avaliacoes", avaliacoes);
            Log.d("DEMO", obj.toString());  // {"id":0,"ticket":"DemoActivity.ticket_id","avaliacoes":[{"idAvaliacao":"1","nota":"nota","observacao":"observacao"},{"idAvaliacao":"1","nota":"nota","observacao":"observacao"}]}

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

For best practice use Gson

Akshay Raiyani
  • 1,243
  • 9
  • 21