将JSONObject转换为JSONArray
我目前正在用JAVA学习一些android编程。 我的老师分享了这段代码,它将使用API,获取其JSON文件,并将其转换为JSONArray文件。 然后,他将遍历该JSONArray并将它们放入ArrayList,然后将它们显示在一个活动上。
问题是我正在使用的API会返回一个JSONObject文件,而我不知道如何正确地将其转换为JSONArray。
import android.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; public class JSONParser { String charset = "UTF-8"; HttpURLConnection conn; DataOutputStream wr; StringBuilder result; URL urlObj; JSONArray jObj = null; StringBuilder sbParams; String paramsString; public JSONArray makeHttpRequest(String url, String method) { sbParams = new StringBuilder(); if(method.equals("GET")){ // request method is GET if (sbParams.length() != 0) { url += "?" + sbParams.toString(); } try { urlObj = new URL(url); conn = (HttpURLConnection) urlObj.openConnection(); conn.setDoOutput(false); conn.setRequestMethod("GET"); conn.setRequestProperty("AccountKey", "pVU56+0hI26DNLeTzlU/Dw=="); conn.setRequestProperty("UniqueUserId", "33c07f2f-b4c0-4151-acd3-e0829b303d2c"); conn.setRequestProperty("accept", "application/json"); conn.setConnectTimeout(15000); conn.connect(); } catch (IOException e) { e.printStackTrace(); } } try { //Receive the response from the server InputStream in = new BufferedInputStream(conn.getInputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); result = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { result.append(line); } Log.d("JSON Parser", "result: " + result.toString()); } catch (IOException e) { // e.printStackTrace(); } conn.disconnect(); // try parse the string to a JSON object try { jObj = new JSONArray(result.toString()); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON Object return jObj; }
}
APIurl及其自定义标头:
URL: http://datamall2.mytransport.sg/ltaodataservice/TaxiAvailability
包头中
AccountKey: pVU56+0hI26DNLeTzlU/Dw== UniqueUserId: 33c07f2f-b4c0-4151-acd3-e0829b303d2c accept: application/json
EDIT2:我使用它来获取带有自定义标头的原始数据。 http://requestmaker.com/
编辑:这是我得到的JSON。
{ "odata.metadata": "http://datamall2.mytransport.sg/ltaodataservice/$metadata#TaxiAvailability", "value": [ { "Longitude": 103.84009, "Latitude": 1.35989 }, { "Longitude": 103.84679, "Latitude": 1.35544 }, { "Longitude": 103.76928, "Latitude": 1.4419 } .... ] }
添加它代替jObj = new JSONArray(result.toString());
JSONObject obj = new JSONObject(result.toString()); JSONArray arr = obj.getJSONArray("value");
现在您可以按照自己的方式使用JSONArray
。
JSONObject Jobj = new JSONObject(result.toString()); JSONArray Jarray = obj.getJSONArray("value");
你需要的是Jarray
。
然后迭代Jarray
以获取对象中的经度和纬度值。