将 JSONObject 转换为 JSONArray
Converting JSONObject to JSONArray
我目前正在使用 JAVA 学习一些 android 编程。我的老师分享了这段代码,它将使用 API,获取它的 JSON 文件,并将其转换为 JSON 数组文件。然后他将遍历 JSONArray 并将它们放入 ArrayList 中,然后再将它们显示到 activity.
问题是我正在使用 returns 的 API 一个 JSONObject 文件,我不知道如何正确地将其转换为JSON数组。
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;
}
}
API URL 及其自定义 headers:
URL: http://datamall2.mytransport.sg/ltaodataservice/TaxiAvailability
headers-
AccountKey: pVU56+0hI26DNLeTzlU/Dw==
UniqueUserId: 33c07f2f-b4c0-4151-acd3-e0829b303d2c
accept: application/json
EDIT2:我用它来获取自定义的原始数据 headers。
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
arr
。
JSONObject Jobj = new JSONObject(result.toString());
JSONArray Jarray = obj.getJSONArray("value");
你需要的是Jarray
.
然后迭代Jarray
得到对象和对象中的值Longitude,Latitude。
我目前正在使用 JAVA 学习一些 android 编程。我的老师分享了这段代码,它将使用 API,获取它的 JSON 文件,并将其转换为 JSON 数组文件。然后他将遍历 JSONArray 并将它们放入 ArrayList 中,然后再将它们显示到 activity.
问题是我正在使用 returns 的 API 一个 JSONObject 文件,我不知道如何正确地将其转换为JSON数组。
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;
}
}
API URL 及其自定义 headers:
URL: http://datamall2.mytransport.sg/ltaodataservice/TaxiAvailability
headers-
AccountKey: pVU56+0hI26DNLeTzlU/Dw==
UniqueUserId: 33c07f2f-b4c0-4151-acd3-e0829b303d2c
accept: application/json
EDIT2:我用它来获取自定义的原始数据 headers。 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
arr
。
JSONObject Jobj = new JSONObject(result.toString());
JSONArray Jarray = obj.getJSONArray("value");
你需要的是Jarray
.
然后迭代Jarray
得到对象和对象中的值Longitude,Latitude。