簡體   English   中英

具有多個數組的Android JSON解析

[英]Android JSON Parsing with multiple arrays

我需要解析具有多個數組的JSON文件。 數組的格式為:

{
    "List": {
        "Something": [
            {
                "Name": "John",
                "phone": "test"
            }
        ]
        "SomethingElse": [
            {
                "Name": "Smith",
                "phone": "test"
            }
        ]
    }
}

問題是我不知道下一個數組名稱是什么。 是否可以解析所有數組中的數據而無需其名稱和不更改其結構?

謝謝。

JSON格式

{
  "data": {
    "current_condition": [
      {
        "cloudcover": "25",
        "humidity": "62",
        "observation_time": "04:57 PM",
        "precipMM": "0.1",
        "pressure": "1025",
        "temp_C": "10",
        "temp_F": "50",
        "visibility": "10",
        "weatherCode": "113",
        "weatherDesc": [
          {
            "value": "Clear"
          }
        ]
      }
    ]
  }
}

獲得“ weatherDesc”的價值

    private class DownloadJSON extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(MainActivity.this);
        // Set progressdialog title
        mProgressDialog.setTitle("Android JSON Parse Tutorial");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // Create an array
        arraylist = new ArrayList<HashMap<String, String>>();
        // Retrieve JSON Objects from the given URL address
        jsonobject = JSONfunctions
                .getJSONfromURL("http://api.worldweatheronline.com/free/v1/weather.ashx?q=London&format=json&num_of_days=5&key=8mqumbup9fub7bcjtsxbzxx9");

        try {
            // Locate the array name in JSON
            JSONObject on=jsonobject.getJSONObject("data");
            jsonarray = on.getJSONArray("current_condition");

            for (int i = 0; i < jsonarray.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                jsonobject = jsonarray.getJSONObject(i);
            JSONArray sen1=jsonobject.getJSONArray("weatherDesc");
                // Retrive JSON Objects
            for(int j=0;j<sen1.length();j++){
                jsonobject2 = sen1.getJSONObject(j);
                map.put("value0", jsonobject2.getString("value"));
                map.put("value1",jsonobject2.getString("value"));

                map.put("flag", null);
                // Set the JSON Objects into the array
                arraylist.add(map);
            }
            }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {
        // Locate the listview in listview_main.xml
        listview = (ListView) findViewById(R.id.listview);
        // Pass the results into ListViewAdapter.java
        adapter = new ListViewAdapter(MainActivity.this, arraylist);
        // Set the adapter to the ListView
        listview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();
    }
}

嘗試這個

我寫了一個函數來遞歸地迭代JsonObject,卻不知道鍵名。

private void parseJson(JSONObject data) {

        if (data != null) {
            Iterator<String> it = data.keys();
            while (it.hasNext()) {
                String key = it.next();

                try {
                    if (data.get(key) instanceof JSONArray) {
                        JSONArray arry = data.getJSONArray(key);
                        int size = arry.length();
                        for (int i = 0; i < size; i++) {
                            parseJson(arry.getJSONObject(i));
                        }
                    } else if (data.get(key) instanceof JSONObject) {
                        parseJson(data.getJSONObject(key));
                    } else {
                        System.out.println("" + key + " : " + data.optString(key));
                    }
                } catch (Throwable e) {
                    System.out.println("" + key + " : " + data.optString(key));
                    e.printStackTrace();

                }
            }
        }
    }

Something值后的JSON中缺少逗號,但是除此之外,您可以使用任何JSON解析器對其進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM