{"Suggestions":[{"Itinerary_1":[{"Cities":"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai","Citieids":"14-85-114-2","Kms":595}],"Itinerary_2":[{"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai","Citieids":"14-114-114-2","Kms":560}],"Itinerary_3":[{"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai","Citieids":"14-114-114-2","Kms":560}]}]}
这是我的json响应。这个json有一个内部数组我怎么能得到值
这是我的代码:
class itinerarydetails extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
*/
boolean failure = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("orgin", "14"));
params.add(new BasicNameValuePair("destination", "2"));
params.add(new BasicNameValuePair("orgin_date", "28/06/2017"));
params.add(new BasicNameValuePair("destination_date", "07/07/2017"));
json = jsonParser.makeHttpRequest(itineraryurl, "GET",
params);
try {
//Suggestions
jsonarray = json.getJSONArray("Suggestions");
// JSONArray list = mainObj.getJSONArray("prodCat_list");
String check;
if(jsonarray != null) {
// Toast.makeText(getApplicationCon text(), "MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE",
// Toast.LENGTH_SHORT).show();
Log.d("check","MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE");
for (int i = 0; i < jsonarray.length(); i++) {
// JSONObject elem = list.getJSONObject(i);
JSONObject object = jsonarray.getJSONObject(i);
//JSONArray prods = elem.getJSONArray("prods");
jsoninsidearray = object.getJSONArray("Itinerary_1");
if(jsoninsidearray != null) {
Log.d("check","INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE");
for (int j = 0; j < jsoninsidearray.length(); j++) {
JSONObject innerElem = jsoninsidearray.getJSONObject(j);
if(innerElem != null) {
Log.d("check","innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE");
cityjson = innerElem.getString("Cities");
itinerary = innerElem.getString("Citieids");
totalkms = innerElem.getString("Kms");
}
else
{
Log.d("check","innerElement ARRAY IS EMPTY");
}
}
}
else
{
Toast.makeText(getApplicationContext(), "INSIDE ARRAY IS EMPTY",
Toast.LENGTH_SHORT).show();
Log.d("check","INSIDE ARRAY IS EMPTY");
}
}
}
else
{
Toast.makeText(getApplicationContext(), "MAIN ARRAY IS EMPTY",
Toast.LENGTH_SHORT).show();
Log.d("check","MAIN ARRAY IS EMPTY");
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
Toast.makeText(getApplicationContext(), "hai",
Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), cityjson, Toast.LENGTH_SHORT).show();
}
}
我是Vignesh,我有一个疑问,请在下面帮助 但是显示了空值。我可以从json中获取内部数组的值。
答案 0 :(得分:3)
让我们尝试理解输入JSON对象的结构。
格式化的JSON对象
{
"Suggestions":[
{
"Itinerary_1":[
{
"Cities":"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai",
"Citieids":"14-85-114-2",
"Kms":595
}
],
"Itinerary_2":[
{
"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai",
"Citieids":"14-114-114-2",
"Kms":560
}
],
"Itinerary_3":[
{
"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai",
"Citieids":"14-114-114-2",
"Kms":560
}
]
}
]
}
因此,您的代码应该有一个额外的for循环来遍历建议中每个JSONObject的3个行程元素。
这是更新的代码,请查看添加了index的新for循环作为迭代计数器。
try {
JSONObject json = new JSONObject("{\"Suggestions\":[{\"Itinerary_1\":[{\"Cities\":\"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai\",\"Citieids\":\"14-85-114-2\",\"Kms\":595}],\"Itinerary_2\":[{\"Cities\":\"Madurai - Pillayarpatti - Pillayarpatti - Chennai\",\"Citieids\":\"14-114-114-2\",\"Kms\":560}],\"Itinerary_3\":[{\"Cities\":\"Madurai - Pillayarpatti - Pillayarpatti - Chennai\",\"Citieids\":\"14-114-114-2\",\"Kms\":560}]}]}");
JSONArray jsonarray = json.getJSONArray("Suggestions");
if(jsonarray != null) {
Log.d("check","MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE");
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject object = jsonarray.getJSONObject(i);
// ** START NEW FOR LOOP
for (int index=1; index < 4; index++) {
Log.d("check","-------------------------");
Log.d("check","Print Itinerary_" + (index));
JSONArray jsoninsidearray = object.getJSONArray("Itinerary_" + index);
if(jsoninsidearray != null) {
Log.d("check","INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE");
for (int j = 0; j < jsoninsidearray.length(); j++) {
JSONObject innerElem = jsoninsidearray.getJSONObject(j);
if(innerElem != null) {
Log.d("check","innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE");
String cityjson = innerElem.getString("Cities");
String itinerary = innerElem.getString("Citieids");
String totalkms = innerElem.getString("Kms");
Log.d("check", cityjson + " | " + itinerary + " | " + totalkms);
} else {
Log.d("check","innerElement ARRAY IS EMPTY");
}
}
} else {
Log.d("check","INSIDE ARRAY IS EMPTY");
}
} // ** END NEW FOR LOOP
Log.d("check", "");
}
} else {
Log.d("check","MAIN ARRAY IS EMPTY");
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
示例运行
07-03 22:03:05.028 30616-30616/a D/check: MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: --------------------------
07-03 22:03:05.028 30616-30616/a D/check: Print Itinerary_1
07-03 22:03:05.028 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai | 14-85-114-2 | 595
07-03 22:03:05.028 30616-30616/a D/check: --------------------------
07-03 22:03:05.028 30616-30616/a D/check: Print Itinerary_2
07-03 22:03:05.028 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: Madurai - Pillayarpatti - Pillayarpatti - Chennai | 14-114-114-2 | 560
07-03 22:03:05.029 30616-30616/a D/check: --------------------------
07-03 22:03:05.029 30616-30616/a D/check: Print Itinerary_3
07-03 22:03:05.029 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: Madurai - Pillayarpatti - Pillayarpatti - Chennai | 14-114-114-2 | 560
答案 1 :(得分:0)
只需更改此行jsoninsidearray = object.getJSONArray("Itinerary_1");
以强>
jsoninsidearray = object.getJSONArray("Itinerary_"+i);
答案 2 :(得分:0)
愿这会帮到你
JSONObject mainObj = = new JSONObject(response);
JSONArray Suggestionslist = mainObj.getJSONArray("Suggestions");
if(Suggestionslist != null){
for(int i = 0; i < Suggestionslist.length();i++){
JSONObject elem = list.getJSONObject(i);
if(elem != null){
JSONArray Itinerary = elem.getJSONArray("Itinerary_"+ (i+1));
if(Itinerary != null){
for(int j = 0; j < Itinerary.length();j++){
JSONObject innerElem = Itinerary.getJSONObject(j);
if(innerElem != null){
String Cities = innerELem.getString("Cities");
String Citieids = innerElem.getString("Citieids");
String Kms = innerElem.getString("Kms");
}
}
}
}
}
答案 3 :(得分:0)
在这里你必须首先尝试创建jsonobject
JSONObject object = new JSONObject(json);
JSONArray data = object.getJSONArray("Suggestions");
JSONObject obj1 = data.getJSONObject(0);
JSONArray inner = obj1.getJSONArray("Itinerary_1");
String Cities=inner.getString(0);
String Citiesids=inner.getString(1);
String Kms=inner.getString(2);
//and so on copy and change the name of Itinerary_*
}
答案 4 :(得分:0)
这是innerArray的完整解决方案
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("Suggestions");
System.out.println("====================///////////" + jarray);
if (jarray != null) {
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
System.out.print("obj//////////" + object.length() + "\n");
int m;
for (int i1 = 1; i1 <= object.length(); i1++) {
System.out.println("inner====== inside second for loop =====");
JSONArray jarray1 = object.getJSONArray("Itinerary_" + i1);
JSONObject object1 = jarray1.getJSONObject(i);
//JSONObject jsoninside = object.getJSONObject("Itinerary_"+ i1);
System.out.println("inner====================///////////\\\\" + object1);
if (object1 != null) {
citynames = object1.getString("Cities");
citykms = object1.getString("Kms");
} else {
Log.d("check", "INSIDE ARRAY IS EMPTY");
}
}
return true;
}
}
} else {
Log.d("check", "MAIN ARRAY IS EMPTY");
}