如何获取json对象和数组值?

时间:2018-08-30 10:27:26

标签: android arrays json

如何解析这种格式的JSON值?我想获取数据元素的详细信息,但是在数据内部有“日期”,而在日期内部有包含两个以上元素的数组。我想先获取所有日期内的数据,然后在这些日期内获取这些日期内的所有信息。我该如何实现?请帮忙。 我尝试了以下代码,但没有成功

try {
    JSONObject jsonObject = new JSONObject("data");
    JSONArray jsonArray =jsonObject.getJSONArray(String.valueof(cuurentdate));

    JSONArray session;
    for (int i = 0; i < jsonArray.length() - 1; i++) {
        jsonObject = jsonArray.getJSONObject(i);
        session= jsonObject.getJSONArray("session");

        Log.d("MyLog", session + "");
    }
} catch (JSONException e) {
    e.printStackTrace();
}

以下是格式

{
  "status": 1,
  "status_code": 200,
  "data": {
    "2018-02-11": [
      {
        "session": "01:00 AM",
        "place": true

      },
      {
        "session": "02:00 AM",
        "place": true

      }
    ],
    "2018-02-12": [
      {
        "session": "01:00 AM",
        "place": true

      },
      {
        "session": "02:00 AM",
        "place": true
      }
    ]
  }
}

3 个答案:

答案 0 :(得分:1)

您只需要将响应字符串传递给方法。您可以尝试以下方法:

  private void jsonParsing(String jsonString) {

   // String jsonString = "{ \"status\": 1, \"status_code\": 200, \"data\": { \"2018-02-11\": [ { \"session\": \"01:00 AM\", \"place\": true }, { \"session\": \"02:00 AM\", \"place\": true } ], \"2018-02-12\": [ { \"session\": \"01:00 AM\", \"place\": true }, { \"session\": \"02:00 AM\", \"place\": true } ] } }";
    try {
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONObject dataObj = jsonObject.getJSONObject("data");

        Iterator<String> iter = dataObj.keys();

        Log.e(TAG, "jsonParsing: "+iter );

        while (iter.hasNext()) {
            String key = iter.next();
                JSONArray datesArray = dataObj.getJSONArray(key);

                ArrayList<String> sessions = new ArrayList<String>();

                for (int i = 0; i < datesArray.length(); i++) {
                    JSONObject datesObject = datesArray.getJSONObject(i);

                    sessions.add(datesObject.getString("session"));
                }
                Log.d("MyLog", sessions + "");

        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:1)

(1)获取主json的JSONObject

 JSONObject objMain = new JSONObject("your json string");

(2)从主json获取“数据”的JSONObject

 JSONObject jsonData = objMain.getJSONObject("data")

(3)从对象“数据”中获取所有键(日期)

Iterator<String> iter = jsonData.keys();

while (iter.hasNext()) {

 String key = iter.next();

try {
     JSONArray arrayDate = objData.getJSONArray(key)
     for (i = 0; i < arrayDate.length(); i++) {

           JSONObject objDate = arrayDate.getJSONObject(i)
           Log.d("#session :", "" + objDate.getString("session"))
           Log.d("#place :", "" + objDate.getBoolean("place"))
          }
 } catch (JSONException e) {
    // Something went wrong!
  }
}

答案 2 :(得分:0)

尝试这个代码

  

在此代码中,jsonMstObject是临时对象,您必须使用您的API响应JSONobject代替jsonMstObject

try {
        JSONObject jsonMstObject = new JSONObject("{"status":1,"status_code":200,"data":{"2018-02-11":[{"session":"01:00 AM","place":true},{"session":"02:00 AM","place":true}],"2018-02-12":[{"session":"01:00 AM","place":true},{"session":"02:00 AM","place":true}]}}");

        JSONObject jsonObject = jsonMstObject.getJSONObject("data");
        JSONArray jsonArray =jsonObject.getJSONArray(String.valueof(cuurentdate));

        ArrayList<String> arrSession = new ArrayList<String>(); 
        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = jsonArray.getJSONObject(i);
            arrSession.add(jsonObject.getString("session"));
        }

        Log.d("MyLog", arrSession + "");
    } catch (JSONException e) {
        e.printStackTrace();
    }

此代码中的arrSession是您的会话字符串数组

例如您通过cuurentdate =“ 2018-02-11”,那么您收到的结果是

  

[01:00 AM,02:00 AM]

注意:此代码根据您的 cuurentdate 参数而工作。这是用于从数据获取静态日期数组并创建字符串数组的代码。