У меня проблемы с веб-службой, как выглядит служба.Как перебирать массив json в другом массиве в android
[
{"NND (Megastore \/ Supermarket)":
[
{"question":"\"33\" Export (Can)","questionid":"32"},
{"question":"Ace Roots (Can)","questionid":"33"},
{"question":"Amstel (Can)","questionid":"34"},
{"question":"Climax (Can)","questionid":"35"},
{"question":"Fayrouz (Cann)","questionid":"36"},
{"question":"Goldberg (RGB)","questionid":"37"},
{"question":"Gulder (Can)","questionid":"38"},
{"question":"Gulder (RGB)","questionid":"39"},
{"question":"Heineken (Can)","questionid":"40"},
{"question":"Heineken (RGB)","questionid":"41"},
{"question":"Legend (Can)","questionid":"42"},
{"question":"Maltina (Can)","questionid":"43"},
{"question":"Star (Can)","questionid":"44"},
{"question":"Star (RGB)","questionid":"45"},
{"question":"Star Radler (Can)","questionid":"46"},
{"question":"Strongbow (Can)","questionid":"47"}
]
},
{"NND (Superette - including returnable)":
[
{"question":"\"33\" Export (Can)","questionid":"48"},
{"question":"Ace Roots (Can)","questionid":"49"},
{"question":"Amstel (Can)","questionid":"50"},
{"question":"Climax (Can)","questionid":"51"},
{"question":"Fayrouz (Cann)","questionid":"52"},
{"question":"Goldberg (RGB)","questionid":"53"},
{"question":"Gulder (Can)","questionid":"54"},
{"question":"Gulder (RGB)","questionid":"55"},
{"question":"Heineken (Can)","questionid":"56"},
{"question":"Heineken (RGB)","questionid":"57"},
{"question":"Legend (Can)","questionid":"58"},
{"question":"Maltina (Can)","questionid":"59"},
{"question":"Star (Can)","questionid":"60"},
{"question":"Star (RGB)","questionid":"61"},
{"question":"Star Radler (Can)","questionid":"62"},
{"question":"Strongbow (Can)","questionid":"63"}
]
},
]
Вот декларация HEADER1
private static final String HEADER1 = "NND (Megastore \\/ Supermarket)";
Я использую AsyncTask в андроиде, ниже, как мой doInBackgroud код выглядит следующим образом.
@Override
protected String doInBackground(String... strings) {
JSONParser jsonParser = new JSONParser();
listDataHeader = new ArrayList<>();
listDataChild = new HashMap<>();
//get JSON string from URL
JSONArray json = jsonParser.getMTOQuestions(mtoURL);
//JSONObject json = jsonParser.getMTOQuestions(mtoURL);
try{
//JSONObject c = json.getJSONObject(HEADER1);
//JSONArray jsonArray = json.getJSONArray(0);
for(int i =0; i<json.length(); i++){
//Log.e("INSIDE_MTO",""+c.getString(HEADER1));
//String question = c.getString(QUESTION);
JSONObject job = json.getJSONObject(i);
JSONArray header1 = job.getJSONArray(HEADER1);
listDataHeader.add(HEADER1);
Log.e("INSIDE_MTO",""+json);
for (int quest_in_headr = 0; quest_in_headr<header1.length(); quest_in_headr++){
JSONObject jsonHeader1 = header1.getJSONObject(quest_in_headr);
question = jsonHeader1.getString(QUESTION);
String qid = jsonHeader1.getString(QUESTION_ID);
//HashMap<String, String> forHeader1 = new HashMap<>();
List<String> forHeader1 = new ArrayList<>();
forHeader1.add(question.trim());
//Log.e("INSIDE_INNER_LOOP", question);
listDataChild.put(listDataHeader.get(0), forHeader1);
//Log.e("ADD_DATA",""+listDataHeader.add(HEADER1));
}
// map.put(QUESTION_ID, qid.trim());
}
}
catch (JSONException e){
e.printStackTrace();
}
finally {
}
return null;
}
Вот как JSONParser код выглядит
public JSONArray getMTOQuestions(String url){
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try{
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200){
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null){
builder.append(line);
//Log.i("OutletList",line+"\n");
}
}
else {
Log.e("MTOQUESTION","Failed load MTO questionnaire");
}
}
catch (ClientProtocolException cpe){
cpe.printStackTrace();
}
catch (IOException ioexception){
ioexception.printStackTrace();
}
finally {
}
//try parse the JSON to an Object
try{
jarray = new JSONArray(builder.toString().trim());
}
catch (JSONException ex){ex.printStackTrace();}
//return the JSON string gotten
return jarray;
}
, что Log.e ("INSIDE_MTO", "" + JSON); возвращается в
[{"NND (Megastore \/ Supermarket)":[{"question":"\"33\" Export (Can)","questionid":"32"},{"question":"Ace Roots (Can)","questionid":"33"},{"question":"Amstel (Can)","questionid":"34"},{"question":"Climax (Can)","questionid":"35"},{"question":"Fayrouz (Cann)","questionid":"36"},{"question":"Goldberg (RGB)","questionid":"37"},{"question":"Gulder (Can)","questionid":"38"},{"question":"Gulder (RGB)","questionid":"39"},{"question":"Heineken (Can)","questionid":"40"},{"question":"Heineken (RGB)","questionid":"41"},{"question":"Legend (Can)","questionid":"42"},{"question":"Maltina (Can)","questionid":"43"},{"question":"Star (Can)","questionid":"44"},{"question":"Star (RGB)","questionid":"45"},{"question":"Star Radler (Can)","questionid":"46"},{"question":"Strongbow (Can)","questionid":"47"}]},{"NND (Superette - including returnable)":[{"question":"\"33\" Export (Can)","questionid":"48"},{"question":"Ace Roots (Can)","questionid":"49"},{"question":"Amstel (Can)","questionid":"50"},{"question":"Climax (Can)","questionid":"51"},{"question":"Fayrouz (Cann)","questionid":"52"},{"question":"Goldberg (RGB)","questionid":"53"},{"question":"Gulder (Can)","questionid":"54"},{"question":"Gulder (RGB)","questionid":"55"},{"question":"Heineken (Can)","questionid":"56"},{"question":"Heineken (RGB)","questionid":"57"},{"question":"Legend (Can)","questionid":"58"},{"question":"Maltina (Can)","questionid":"59"},{"question":"Star (Can)","questionid":"60"},{"question":"Star (RGB)","questionid":"61"},{"question":"Star Radler (Can)","questionid":"62"},{"question":"Strongbow (Can)","questionid":"63"}]}]
Но я получаю эту ошибку:
JsonException "org.json.JSONException: No value for NND (Megastore \/ Supermarket)"
и ошибка указывает на эту строку кода
JSONArray header1 = job.getJSONArray(HEADER1);
Я искал в Интернете и увидел подобный вопрос здесь на Stackoverflow, но, похоже, мой собственный случай немного отличается. Буду признателен, если вы сможете помочь.
Благодарим вас в ожидании.
Пожалуйста, отредактируйте ваш вопрос с помощью [mcve]. Например, мы не можем помочь вам без значения 'HEADER1', и ваш JSON (и код) можно значительно уменьшить, чтобы выделить только проблему. –
Хотя, я думаю, проблема в том, что если' HEADER1' является 'NND (Megastore \/Супермаркет), то ваш второй объект JSON в массиве не имеет этого заголовка, поэтому, конечно, вы получите это исключение –
@ cricket_007 вот значение HEADER1 NND (Megastore \/Supermarket) У меня также есть обновил вопрос, чтобы показать, что Log.e ("INSIDE_MTO", "" + json); return –