#android #json #arrays #jsonobject
#Android #массивы #json
Вопрос:
Я пытаюсь получить данные json, используя URL-адрес в Android. Мой массив json выглядит следующим образом. Я использовал приведенную ниже кодировку, но проблема в том, что я получаю значение length
jarray
, равное 1, хотя в массиве больше значений. Во-вторых, я получаю длину newarr
, равную 15, но одни и те же значения отображаются 15 раз, т.е. id = 1 отображается 15 раз. Я опубликовал коды, и, поскольку я новичок в json, пожалуйста, расскажите мне шаг за шагом, где я ошибаюсь.
[
{
"items": [
{
"id": "11",
"Item_Id": "123",
"Item_Name": "Chicken Cream Soup",
"Price": "8",
"Currency": "AED",
"Category": "Soup",
"Description": "Creamy Chicken Soup with garnish amp; side helpings",
"Unit": "2",
"food_type": "Non",
"Image_Large": "/images_large/chickensoup.jpg",
"Image_Thumb": "/images_large/chickensoup.jpg",
"Timestamp": "6/23/2014 9:49:43 PM",
"Promotion": "",
"Item_Name_arabic": "حساء الطماطم",
"Item_Name_russian": "",
"Currency_arabic": "درهم",
"Currency_russian": "",
"Description_arabic": "حساء الطماطم",
"Description_russian": "",
"Note": "",
"Nutritional_info": "",
"extrafield_1": "",
"extrafield_2": "",
"preferncess": [
"No Salt",
"Extra Sugar"
],
"preferncess_ids": [
"1",
"2"
],
"price": [
"4",
"5"
],
"preferncess_arabic": [
"لا الملح",
"سكر اضافية"
]
},
{
"id": "12",
"Item_Id": "501",
"Item_Name": "Pasta Napolitan",
"Price": "18",
"Currency": "AED",
"Category": "Pasta",
"Description": "Pasta in Napolitan Sauce",
"Unit": "20",
"food_type": "Non",
"Image_Large": "/images_large/pasta.jpg",
"Image_Thumb": "/images_large/pasta.jpg",
"Timestamp": "6/23/2014 9:47:45 PM",
"Promotion": "",
"Item_Name_arabic": "حساء الطماطم",
"Item_Name_russian": "",
"Currency_arabic": "درهم",
"Currency_russian": "",
"Description_arabic": "حساء الطماطم",
"Description_russian": "",
"Note": "",
"Nutritional_info": "",
"extrafield_1": "",
"extrafield_2": "",
"preferncess": [
"No Salt"
],
"preferncess_ids": [
"3"
],
"price": [
"5"
],
"preferncess_arabic": [
"لا الملح"
]
},
//some more values till id=25
"categories": [
{
"categoryName": "Salads",
"categoryShortName": "Salads",
"catid": "0",
"categoryArabicName": "سلطة خضراء"
},
{
"categoryName": "Mezzah",
"categoryShortName": "Mezzah",
"catid": "1",
"categoryArabicName": "المزة"
},
//some more values till id=25
"questions": [
{
"q_id": "1",
"q_question": "How would you rate our Menu ?",
"q_option1": "Excellent",
"q_option2": "Very Good",
"q_option3": "Good",
"q_option4": "Bad",
"q_option5": "Terrible",
"Timestamp": "9/12/2013 3:31:55 PM",
"q_status": "1"
},
{
"q_id": "2",
"q_question": "How would you rate our presentation, taste and quality of food ?",
"q_option1": "Excellent",
"q_option2": "Very Good",
"q_option3": "Good",
"q_option4": "Bad",
"q_option5": "Terrible",
"Timestamp": "9/12/2013 3:31:55 PM",
"q_status": "1"
},
//some more values here
Код синтаксического анализа Json
String result = null;
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://166.62.17.208/json_preferencess.aspx");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success " "nameValuePairs");
}
catch(Exception e)
{
Log.e("log_tag", "Error in http connection " e.toString());
}
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,HTTP.UTF_8),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line "n");
}
is.close();
result=sb.toString();
Log.e("log_tag", "result " result.toString());
}
catch(Exception e)
{
Log.e("log_tag", "Error converting result " e.toString());
}
try
{
JSONArray jArray = new JSONArray(result);
String s="",s1,s2,s3,s4,s5,s6,s7,s8,s9;
Log.w("Lengh","" jArray.length());
for(int i=0;i<jArray.length();i ){
JSONArray newarr = jArray.getJSONObject(i).getJSONArray("items");
Log.w("Lengh","" newarr.length());
for(int j= 0; j<newarr.length();j ){
JSONObject json_data = newarr.getJSONObject(i);
s=json_data.getString("id");
s1=json_data.getString("Item_Id");
Log.i("json display","" s "" s1);
}
}
}
catch(JSONException e)
{
Log.e("log_tag", "Error parsing data " e.toString());
}
Ответ №1:
попробуйте этот способ
public String postData(String url, List<NameValuePair> nameValuePairs)
throws Exception {
// Getting the response handler for handling the post response
ResponseHandler<String> res = new BasicResponseHandler();
HttpPost postMethod = new HttpPost(url);
// Setting the data that is to be sent
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
String response = httpClient.execute(postMethod, res);
Log.i(TAG , "response :: " response);
return response;
}
Для json.
rootObject = new JSONObject(postData(url,nameValuesPair));
Комментарии:
1. Я пытаюсь получить данные, а не данные post
2. хорошо, тогда скажите мне, что вы получите все данные, напечатанные на экране журнала.
3. проблема в том, что я могу получить первые данные с id = 11. Длина JArray получается равной 1, хотя в нем содержится около 25 значений.