java 将 JSONObject 转换为 JSONArray
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/35573995/
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
Converting JSONObject to JSONArray
提问by Kei
I'm currently learning some android programming with JAVA. My teacher shared this piece of code which will consume an API, get its JSON file, and convert it to a JSONArray file. Then he will Iterate through that JSONArray and put them into an ArrayList before displaying them onto an activity.
我目前正在用 JAVA 学习一些 android 编程。我的老师分享了这段代码,它将使用 API,获取其 JSON 文件,并将其转换为 JSONArray 文件。然后他将遍历该 JSONArray 并将它们放入 ArrayList 中,然后再将它们显示到活动中。
The problem is that the API that I'm consuming returns a JSONObject file instead, and I do not know how to properly convert this to JSONArray.
问题是我正在使用的 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;
}
}
}
API URL and its custom headers:
API URL 及其自定义标头:
URL: http://datamall2.mytransport.sg/ltaodataservice/TaxiAvailability
headers-
标题-
AccountKey: pVU56+0hI26DNLeTzlU/Dw==
UniqueUserId: 33c07f2f-b4c0-4151-acd3-e0829b303d2c
accept: application/json
EDIT2: I use this to get my raw data with custom headers. http://requestmaker.com/
EDIT2:我用它来获取带有自定义标题的原始数据。 http://requestmaker.com/
EDIT: This is the JSON that I get.
编辑:这是我得到的 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
}
....
]
}
回答by Rohit5k2
Add this in place of jObj = new JSONArray(result.toString());
添加这个代替 jObj = new JSONArray(result.toString());
JSONObject obj = new JSONObject(result.toString());
JSONArray arr = obj.getJSONArray("value");
Now you can use JSONArray
arr
the way you want.
现在您可以JSONArray
arr
按照自己的方式使用。
回答by Remees M Syde
JSONObject Jobj = new JSONObject(result.toString());
JSONArray Jarray = obj.getJSONArray("value");
What you need is Jarray
.
你需要的是Jarray
。
And then iterate Jarray
to get the objects and values Longitude,Latitude in the objects.
然后迭代Jarray
获取对象和对象中的经度、纬度值。