Android中的JSONParse

时间:2015-07-29 15:57:28

标签: java android json parsing

我有一个JSON:myJSON
但是当我尝试解析它时,我有这样的问题:

  

07-29 18:51:21.203 4995-4995 /? W / System.err的:   org.json.JSONException:值   {“id”:2,“max_volume”:20,“current_volume”:6,“name”:“Поднятьсяна16   этажза5минутпешкомисоскользитьвниз“,”“description”:“Ктопровалит   испытание,скриком'ЭтоСПАРТА!' будетскинутс16этажа。 Кто   провалитиспытание,скриком'ЭтоСПАРТА!' будетскинутс16этажа。   Ктопровалитиспытание,скриком'ЭтоСПАРТА!' будетскинутс16   этажа。 Ктопровалитиспытание,скриком'ЭтоСПАРТА!' будетскинутс   16этажаАЗАЗАчто-нибудьещёчтозанимаетмноготекста,   !ха-ха “ ”MAX_COUNT“:10, ”date_from“: ”2015-05-05“, ”DATE_TO“: ”2015年5月15日“, ”CREATE_TIME“:” 2015年5月4日   23:00 GMT + 03:00“,”状态“:”NOT_STARTED“,”update_date“:”2015-05-05   08:00   GMT + 03:00" , “类别”: “NON_STUDY”, “主题”:{ “subject_id”:1, “类型”:“外国   语言 “ ”名“: ”英语“}, ”用户“:[{ ”ID“:1, ”FIRST_NAME“: ”伊琳娜“, ”姓氏“: ”噪声“, ”IMG“:” https://开头avatars3 .githubusercontent.com / U / 1412561 v = 3及S = 460 “},{” ID? “:13”,如first_name “:” 亚历克斯 “ ”姓氏“: ”GRA“, ”IMG“:” HTTPS:/ /avatars2.githubusercontent.com/u/964601?v=3&s=460"}],"badge":{"badge_id":1,"img":"https://www.gravatar.com/avatar/ e514b017977ebf742a418cac697d8996 S = 64&安培; d = identicon&安培; R = PG “ ”姓名?“: ”EnglishPro“, ”受试者“:{ ”ID“:1, ”名称“: ”英语“, ”类型“:” 外国   语言“},”练习“:10,”理论“:0,”日期“:”2015-05-07 14:30   GMT + 03:00“,”进度“:0.14}}类型org.json.JSONObject不能   转换为JSONArray

我试过这样:
服务代码:

public class getChallenge extends AsyncTask<Void, Void, String> {

        String mUrl;
        OkHttpClient client = new OkHttpClient();
        String result = "";

        public getChallenge(String url) {
            this.mUrl = url;
        }

        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        @Override
        protected String doInBackground(Void... params) {
            Log.d("Background", "inBackground");
            try {
                URL mUrl = new URL(url);
                urlConnection = (HttpURLConnection) mUrl.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();
                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();
                reader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                result = buffer.toString();

            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String strJson) {
            super.onPostExecute(strJson);
            Log.d(LOG_TAG, strJson);
            Exercise exercise = new Exercise();
            exercise = ParseJSON.ExcerciseParseJSON(strJson);
//            Log.d("EXERSICE", exercise.getName());
        }
    }

和我的Parse方法:

public static Exercise ExcerciseParseJSON(String strJson) {
    Log.d("ExcerciseParseJSON", "working");
    Exercise exercise = new Exercise();
    try {
        JSONArray array = new JSONArray(strJson);
            exercise.setId(array.getJSONObject(0).getLong("id"));
            exercise.setMax_volume(array.getJSONObject(0).getInt("max_volume"));
            exercise.setCurrent_volume(array.getJSONObject(0).getInt("current_volume"));
            exercise.setName(array.getJSONObject(0).getString("name"));
            exercise.setDescription(array.getJSONObject(0).getString("description"));
            exercise.setMax_count(array.getJSONObject(0).getInt("max_count"));
            exercise.setDate_from(array.getJSONObject(0).getString("date_from"));
            exercise.setDate_to(array.getJSONObject(0).getString("date_to"));
            exercise.setCreate_time(array.getJSONObject(0).getString("create_time"));
            exercise.setStatus(array.getJSONObject(0).getString("status"));
            exercise.setUpdate_time(array.getJSONObject(0).getString("update_date"));
            exercise.setCategory(array.getJSONObject(0).getString("category"));
    }  catch (JSONException e) {
        e.printStackTrace();
    }
    return exercise;
}

我的错误在哪里?或者你可以给我正确的代码:)

3 个答案:

答案 0 :(得分:0)

使用JSONObject后,只需使用JSONTokener()将json存储为对象。

从中你可以做你现在做的事情。

JSONObject array = (JSONObject) new JSONTokener(strJson).nextValue();

exercise.setId(array.getLong("id"));

以防万一,您想要获取users列表

你可以使用像

这样的数组
JSONArray users = array.getJSONArray("users")

答案 1 :(得分:0)

JSONObject array = new JSONObject(strJson);

使用此功能并查看

答案 2 :(得分:0)

试试这个

{"id":1,"name":"p1","similarProducts":[{"id":2,"name":"p2"}]}