#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
— usejsonArray.getLength()
, чтобы определить, сколько там элементов. Каждый из этих элементов являетсяJSONObject
. ИспользуйтеgetString()
onJSONObject
для получения свойств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 🙂