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

2
  • Use Gson Library to generate json. Commented Sep 5, 2019 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 Commented Sep 5, 2019 at 21:15

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.