org.json.JSONObject 无法在 android 中转换为 JSONArray
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12722468/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
org.json.JSONObject cannot be converted to JSONArray in android
提问by kongkea
When I try in my localhost it work find. this is the JSON that provide by my localhost.
当我在我的本地主机中尝试时,它可以找到。这是我的本地主机提供的 JSON。
Y it error in this url http://api.androidhive.info/contacts/
是这个 url http://api.androidhive.info/contacts/ 中的错误
[{
"id": "1",
"first_name": "man",
"last_name": "woman",
"username": "man",
"password": "4f70432e6369
70de9929bcc6f1b72412",
"email": "[email protected]",
"url": "http:\/\/localhost\/adchara1\/"
}, {
"id": "6",
"first_name": "first",
"last_name": "Last
Name",
"username": "user",
"password": "1a1dc91c907325c69271ddf0c944bc72",
"email": "0",
"url": "ht
tp:\/\/api.androidhive.info\/contacts\/"
}, {
"id": "7",
"first_name": "1",
"last_name": "2",
"username": "us45",
"password": "33d8f54e33896a5722
7b18642979e558",
"email": "[email protected]",
"url": "http:\/\/ugirusgiarto.wordpress.com\/2011\
/10\/27\/json-php-mysql-with-asynctask-progressdialog\/"
}, {
"id": "9",
"first_name": "First Name",
"last_name": "Last
Name",
"username": "Username",
"password": "dc647eb65e6711e155375218212b3964",
"email": "woman@gm
ail.com",
"url": "http:\/\/mobile.cs.fsu.edu\/parse-json-objects-in-asynctask\/"
}]
x
X
MainActivity
主要活动
public class MainActivity extends Activity {
TextView text_1, text_2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new task().execute();
}
class task extends AsyncTask<String, String, Void> {
private ProgressDialog progressDialog = new ProgressDialog(
MainActivity.this);
InputStream is = null;
String result = "";
protected void onPreExecute() {
progressDialog.setMessage("Download data...");
progressDialog.show();
progressDialog.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface arg0) {
task.this.cancel(true);
}
});
}
@Override
protected Void doInBackground(String... params) {
// String url_select = "http://192.168.10.111/adchara1/";
String url_select = "http://api.androidhive.info/contacts/";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// read content
is = httpEntity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error converting result " + e.toString());
}
return null;
}
protected void onPostExecute(Void v) {
// ambil data dari Json database
try {
JSONArray Jarray = new JSONArray(result);
for (int i = 0; i < Jarray.length(); i++) {
JSONObject Jasonobject = null;
text_1 = (TextView) findViewById(R.id.txt1);
Jasonobject = Jarray.getJSONObject(i);
// get an output on the screen
String id = Jasonobject.getString("id");
String name = Jasonobject.getString("name");
String email = Jasonobject.getString("email");
String address = Jasonobject.getString("address");
String gender = Jasonobject.getString("gender");
text_1.append("\n" + id + "\t\t" + name + "\t\t\t"
+ email + "\t\t\t\t" + address + "\t\t\t\t" + gender
+ "\t\t\t\t" + "\n");
}
this.progressDialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data " + e.toString());
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
ERROR
错误
Error parsing data org.json.JSONException: Value {
"contacts": [{
"id": "c200",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Ravi Tamada"
}, {
"id": "c201",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Johnny Depp"
}, {
"id": "c202",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Leonardo Dicaprio"
}, {
"id": "c203",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "John Wayne"
}, {
"id": "c204",
"gender": "female",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Angelina Jolie"
}, {
"id": "c205",
"gender": "female",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Dido"
}, {
"id": "c206",
"gender": "female",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Adele"
}, {
"id": "c207",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Hugh Hymanman"
}, {
"id": "c208",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Will Smith"
}, {
"id": "c209",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Clint Eastwood"
}, {
"id": "c2010",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Barack Obama"
}, {
"id": "c2011",
"gender": "female",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Kate Winslet"
}, {
"id": "c2012",
"gender": "male",
"phone": {
"office": "00 000000",
"home": "00 000000",
"mobile": "+91 0000000000"
},
"address": "xx-xx-xxxx,x - street, x - country",
"email": "[email protected]",
"name": "Eminem"
}]
}
of type org.json.JSONObject cannot be converted to JSONArray
回答by RajaReddy PolamReddy
You could try this:
你可以试试这个:
JSONObject object = new JSONObject(result);
JSONArray Jarray = object.getJSONArray("contacts");
for (int i = 0; i < Jarray.length(); i++)
{
JSONObject Jasonobject = Jarray.getJSONObject(i);
}
回答by Nermeen
The url (http://api.androidhive.info/contacts/) returns a JSON object and not a JSON array...
url ( http://api.androidhive.info/contacts/) 返回一个 JSON 对象而不是一个 JSON 数组...
Here:
这里:
JSONArray Jarray = new JSONArray(result);
for (int i = 0; i < Jarray.length(); i++) {
JSONObject Jasonobject = null;
You are assuming the result is a json array. If you do it like the following it will work:
您假设结果是一个 json 数组。如果你像下面这样做,它会起作用:
JSONObject Jasonobject = new JSONObject(result);
JSONArray Jarray = Jasonobject.getJSONArray("contacts");
for (int i = 0; i < Jarray.length(); i++) { ...}
回答by G_S
try using this
尝试使用这个
JSONObject Jarray = new JSONObject(result);
instead of
代替
JSONArray Jarray = new JSONArray(result);
and next
接下来
JSONArray Jarray = Jasonobject.getJSONArray("contacts");
and the for loop continues
for 循环继续
Download image from URL
从 URL 下载图像
Pass the URL to this particular method and you can download the image to the gridview
将 URL 传递给此特定方法,您可以将图像下载到 gridview
private void downloadImage(String urlStr) {
final String url = urlStr;
InputStream in = null;
Message msg = Message.obtain();
msg.what = 1;
try {
in = openHttpConnection(url);
bitmap = BitmapFactory.decodeStream(in);
Bundle b = new Bundle();
b.putParcelable("bitmap", bitmap);
msg.setData(b);
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
private InputStream openHttpConnection(String urlStr) {
InputStream in = null;
int resCode = -1;
try {
URL url = new URL(urlStr);
URLConnection urlConn = url.openConnection();
if (!(urlConn instanceof HttpURLConnection)) {
throw new IOException ("URL is not an Http URL");
}
HttpURLConnection httpConn = (HttpURLConnection)urlConn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
resCode = httpConn.getResponseCode();
if (resCode == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return in;
}
回答by G M Ramesh
try the following to convert :
尝试以下转换:
JSONObject js= new JSONObject(yourjsonobjectvalue);
JSONArray jA = js.getJSONArray("String value");
回答by RvdK
The error indicates that your JSON is a JSON Object
and not an JSON Array
:
该错误表明您的 JSON 是 aJSON Object
而不是JSON Array
:
change:
改变:
JSONArray Jarray = new JSONArray(result)
to
到
JSONObject someObject = new JSONObject(result);
JSONArray Jarray = Jarray.getJSONArray("contacts");
回答by Douglas Tybel
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(uri.toString());
try {
//Obter objeto JSON
clientesJSONArray = json.optJSONArray(Clientes.TABELA);
//Se for 1 objeto n?o virá em JSONArray - Os objetos em JSON s?o separados
//por colchetes [] - No caso de um objeto, n?o será array e sim um simples
//objeto em JSON
if(clientesJSONArray==null){
// means item is JSONObject instead of JSONArray
//json = obj.optJSONObject("offerRideResult");
JSONObject obj = json.getJSONObject(Clientes.TABELA);
Clientes oCliente = new Clientes();
oCliente.setCliente(obj.getString(Clientes.CLIENTE));
oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE));
oCliente.setE_mail(obj.getString(Clientes.E_MAIL));
oCliente.setUsuario(obj.getString(Clientes.USUARIO));
oCliente.setUsuario(obj.getString(Clientes.SENHA));
clientesList.add(oCliente);
}else{
// Mais de um objeto JSON separado por colchetes [] - JSONArray ao invés JSONObject
for (int i = 0; i < clientesJSONArray.length(); i++) {
JSONObject obj = clientesJSONArray.getJSONObject(i);
Clientes oCliente = new Clientes();
oCliente.setCliente(obj.getString(Clientes.CLIENTE));
oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE));
oCliente.setE_mail(obj.getString(Clientes.E_MAIL));
oCliente.setUsuario(obj.getString(Clientes.USUARIO));
oCliente.setUsuario(obj.getString(Clientes.SENHA));
clientesList.add(oCliente);
}
}