如何正确生成JsonArray?

How to generate JsonArray correctly?

我正在 android studio 中开发一个 java 应用程序,并在 java、netbeans 中开发一个 Rest Web 服务器。

我需要向服务器发送 JSON ... 我做了整个引擎 webService 并使用 Postman 对其进行了测试。

使用的 Json 是这样的:

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

工作完美。

所以我去应用中动态生成Json:

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

生成的Json是这样的:

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

如果我在 Postman 上使用第二个 Json,则 webService 无法正确获取它。

获取 id 和 ticket,但 evaluations 数组获取单个项目(avaliacoes.get(0)) = null。

我看过其他关于 Json 和 ArrayJsons 的帖子,但没有任何帮助...

Parsing JSON Object in Java

Convert JsonObject to String

How to create correct JSONArray in Java using JSONObject

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

只需将 avaliacoes.add(avaliacao); 替换为 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();
        }
    }

最佳实践使用 Gson