Reputation: 115
Help me parsing JSON. I parse this JSON without "moment" and don't know how parse with "moment". My JSON response:
{
"A": [
{
"time0_90": "20",
"score": "0 : 0",
"team1": "Россия",
"team2": "Франция",
"group": "A",
"live": "1"
},
{
"time0_90": "20",
"score": "0 : 0",
"team1": "Португалия",
"team2": "Гондурас",
"group": "A",
"live": "0",
"time": "18:30",
"stadium": "",
"referee": "судья"
}
],
"B": [
{
"time0_90": "3",
"score": "1 : 0",
"moment": [
{
"class_moment": "g",
"name1": "Халк",
"time0_90Moment": "5",
"team": "1"
},
{
"class_moment": "sub",
"name1": "Фред",
"time0_90Moment": "50",
"team": "1",
"name2": "Жо"
}
],
"team1": "Бразилия",
"team2": "Испания",
"group": "B",
"live": "1"
}
],
"C": [],
"D": [],
"E": [],
"F": [
{
"time": "15:00",
"stadium": "Маракана",
"referee": "судья",
"team1": "Россия",
"team2": "Франция",
"group": "F",
"live": "0"
}
],
"G": [],
"H": []
}
This code is parse response without "moment". How to parse response with "moment" and save it in array?
JSONObject jsonResponse = new JSONObject(jsonResult);
for (int j=0; j<8; j++){
String[] groupName = {"A", "B", "C", "D", "E", "F", "G", "H"};
JSONArray jsonMainNode = jsonResponse.optJSONArray(groupName[j]);
if (jsonMainNode.length() == 0){ continue;}
else {
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
team1 = jsonChildNode.optString("team1");
team2 = jsonChildNode.optString("team2");
group = jsonChildNode.optString("group");
int live = jsonChildNode.getInt("live");
String time = null;
if (live == 1){
time = jsonChildNode.optString("time0_90")+"'";
score = jsonChildNode.optString("score");
}
else {
score = jsonChildNode.optString("time");
referee = jsonChildNode.optString("referee");
time = jsonChildNode.optString("stadium");
}
Upvotes: 1
Views: 805
Reputation: 115
I did it, here's the code
JSONObject jsonResponse = new JSONObject(jsonResult);
for (int j=0; j<8; j++){
String[] groupName = {"A", "B", "C", "D", "E", "F", "G", "H"};
JSONArray jsonMainNode = jsonResponse.optJSONArray(groupName[j]);
if (jsonMainNode.length() == 0){ continue;}
else {
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
team1 = jsonChildNode.optString("team1");
team2 = jsonChildNode.optString("team2");
group = jsonChildNode.optString("group");
int live = jsonChildNode.getInt("live");
String time = null;
if (live == 1){
time = jsonChildNode.optString("time0_90")+"'";
score = jsonChildNode.optString("score");
JSONArray jsonMoment = jsonChildNode.optJSONArray("moment");
if (jsonMoment == null)
{
class_moment=new String[1];
name1 = new String[1];
name2 = new String[1];
name1 = new String[1];
time0_90Moment = new String[1];
team = new int[1];
}
else {
class_moment=new String[jsonMoment.length()];
name1 = new String[jsonMoment.length()];
name2 = new String[jsonMoment.length()];
name1 = new String[jsonMoment.length()];
time0_90Moment = new String[jsonMoment.length()];
team = new int[jsonMoment.length()];
for (int k = 0; k < jsonMoment.length(); k++) {
JSONObject jsonChildMoment = jsonMoment.getJSONObject(k);
class_moment[k] = jsonChildMoment.optString("class_moment");
name1[k] = jsonChildMoment.optString("name1");
name2[k] = jsonChildMoment.optString("name2");
time0_90Moment[k] = jsonChildMoment.optString("time0_90Moment");
team[k] = jsonChildMoment.getInt("team");
}}
}
else {
score = jsonChildNode.optString("time");
referee = jsonChildNode.optString("referee");
time = jsonChildNode.optString("stadium");
}
Upvotes: 0
Reputation: 269
try this :
jsonArray moment = json.getJsonArray("B").getJsonObject(0).getJsonArray("moment");
String class = moment.getString("class_moment");
String name= moment.getString("name1");
String time= moment.getString("time0_90Moment");
String team= moment.getString("team");
Upvotes: 1
Reputation: 3415
I would recommend that you use a JSON Mapping library, like Jackson or GSON, manually parsing JSON is a waste of time and effort unless it is purely for educational purposes.
Other than that I assume the correct usage would be .optJSONArray("moment") follow by an iteration with a cast of each result to JSONObject or similar? Manually doing this is just a mess. ;o
Upvotes: 1