简体   繁体   English

将JSONObject转换为JSONArray

[英]Converting JSONObject to JSONArray

I'm currently learning some android programming with JAVA. 我目前正在学习一些使用JAVA的android编程。 My teacher shared this piece of code which will consume an API, get its JSON file, and convert it to a JSONArray file. 我的老师分享了这段代码,它将使用API​​,获取其JSON文件,并将其转换为JSONArray文件。 Then he will Iterate through that JSONArray and put them into an ArrayList before displaying them onto an activity. 然后,他将遍历该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. EDIT2:我使用它来获取带有自定义标头的原始数据。 http://requestmaker.com/ 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
    }
    ....
    ]
    }

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你想要的方式。

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以获取对象中的经度和纬度值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM