Android studio打印JSON响应

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) {

嗨,我正在尝试将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());
我的目标是让用户名、排名和分数以可读的格式打印在每一行的下面

变化:

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();
    }
}
输出为:

迭代jsonArray中的项-使用jsonArray.getLength确定有多少项。这些项中的每一项都是一个JSONObject。使用JSONObject上的getString获取用户名、分数和排名属性。为什么不试试Gson?您好,我正试图让我的JSON像您在Kotlin示例中那样打印出来,您能用java创建一个示例吗?@PaPaB1nG0添加了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();
    }
}