Android studio напечатает ответ в формате JSON

#android #json

#Android #json

Вопрос:

Привет, я пытаюсь напечатать ответ в формате JSON в удобочитаемой форме, которую затем я могу установить в Textview. Это код, в котором я пытаюсь напечатать ответ в формате JSON.

  StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    Log.d("json", response);
                    //Creating JsonObject from response String
                    JSONObject jsonObject = new JSONObject(response);
                    //extracting json array from response string
                    JSONArray jsonArray = jsonObject.getJSONArray("data");
                    JSONObject jsonRow = jsonArray.getJSONObject(0);
                    //get value from jsonRow
                    leaderboardView.setText(jsonArray.toString());
  

он действительно печатает JSON, но в формате JSON. это формат JSON, который я получаю.

 {"data":[{"username":"DolanF","score":"4220","rank":"1"},{"username":"reyay","score":"3760","rank":"2"},{"username":"MeghanG","score":"2570","rank":"3"},{"username":"PrimGosling","score":"1360","rank":"4"},{"username":"JakubRozanski","score":"1190","rank":"5"},{"username":"rodyquigley","score":"1120","rank":"6"},{"username":"Kaz835","score":"800","rank":"7"},{"username":"bailey","score":"570","rank":"8"},{"username":"Ellis","score":"430","rank":"9"},{"username":"Joel","score":"390","rank":"10"}]} 
  

моя цель — получить имя пользователя, ранг и оценку, печатаемые в удобочитаемом формате в каждой строке друг под другом.

Комментарии:

1. Выполните итерацию по элементам в jsonArray — use jsonArray.getLength() , чтобы определить, сколько там элементов. Каждый из этих элементов является JSONObject . Используйте getString() on JSONObject для получения свойств username , score и rank .

2. Почему бы тебе не попробовать Gson ?

Ответ №1:

Изменить:

 jsonArray.toString()
  

в, чтобы:

 jsonArray.toString(4)
  

Параметр (например 4 , как указано выше) — это количество пробелов для отступа для каждого уровня вложенности.

Вы можете ожидать такого вывода: введите описание изображения здесь

Здесь у вас есть пример в Kotlin, как вы можете получить все данные в виде переменной:

 fun readJson() {
    val response =
        "{"data":[{"username":"DolanF","score":"4220","rank":"1"},{"username":"reyay","score":"3760","rank":"2"},{"username":"MeghanG","score":"2570","rank":"3"},{"username":"PrimGosling","score":"1360","rank":"4"},{"username":"JakubRozanski","score":"1190","rank":"5"},{"username":"rodyquigley","score":"1120","rank":"6"},{"username":"Kaz835","score":"800","rank":"7"},{"username":"bailey","score":"570","rank":"8"},{"username":"Ellis","score":"430","rank":"9"},{"username":"Joel","score":"390","rank":"10"}]} n"  
                "n"

    val jsonObject = JSONObject(response)

    val jsonArray = jsonObject.getJSONArray("data")

    var output = ""
    for (position in 0 until jsonArray.length()) {
        val row = jsonArray.getJSONObject(position)

        val name = row.getString("username")
        val score = row.getString("score")
        val rank = row.getInt("rank")

        output  = String.format("%s - %s (rank: %s)n", name, score, rank)
    }

    text_view.text = output
}
  

Или на Java:

 void readJson() {
    String response =
            "{"data":[{"username":"DolanF","score":"4220","rank":"1"},{"username":"reyay","score":"3760","rank":"2"},{"username":"MeghanG","score":"2570","rank":"3"},{"username":"PrimGosling","score":"1360","rank":"4"},{"username":"JakubRozanski","score":"1190","rank":"5"},{"username":"rodyquigley","score":"1120","rank":"6"},{"username":"Kaz835","score":"800","rank":"7"},{"username":"bailey","score":"570","rank":"8"},{"username":"Ellis","score":"430","rank":"9"},{"username":"Joel","score":"390","rank":"10"}]} n"  
                    "n";

    try {
        JSONObject jsonObject = new JSONObject(response);

        JSONArray jsonArray = jsonObject.getJSONArray("data");

        StringBuilder output = new StringBuilder();

        for (int position = 0; position < jsonArray.length(); position  ) {
            JSONObject row = jsonArray.getJSONObject(position);

            String name = row.getString("username");
            String score = row.getString("score");
            int rank = row.getInt("rank");

            output.append(String.format("%s - %s (rank: %s)n", name, score, rank));
        }

        text_views.setText(output.toString());

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

И вывод является:
введите описание изображения здесь

Комментарии:

1. Привет, я пытаюсь заставить свой JSON печатать так, как у вас в примере Kotlin, можете ли вы создать пример на java?

2. @PaPaB1nG0 добавил пример Java 🙂