Android JSONObject无法转换为JSONArray

时间:2014-06-10 10:20:44

标签: android json

我是android的新手。我想要得到json,但我得到了这个错误。 我尝试按照本教程http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

进行操作

我已经在搜索解决方案,但我仍然不知道如何使用JSONArray。

这是我的Json示例

[{"id":"152","category_id":"14","item_name":"Restaurant1","cuisine_id":"3","cuisine_name":"Chinese"},{"id":"161","category_id":"14","item_name":"Restaurant10","cuisine_id":"17","cuisine_name":"Middle Eastern"},{"id":"153","category_id":"14","item_name":"Restaurant2","cuisine_id":"17","cuisine_name":"Middle Eastern"},{"id":"154","category_id":"14","item_name":"Restaurant3","cuisine_id":"7","cuisine_name":"American"},{"id":"155","category_id":"14","item_name":"Restaurant4","cuisine_id":"3","cuisine_name":"Chinese"},{"id":"156","category_id":"14","item_name":"Restaurant5","cuisine_id":"8","cuisine_name":"Coffee"},{"id":"157","category_id":"14","item_name":"Restaurant6","cuisine_id":"8","cuisine_name":"Coffee"},{"id":"158","category_id":"14","item_name":"Restaurant7","cuisine_id":"17","cuisine_name":"Middle Eastern"},{"id":"159","category_id":"14","item_name":"Restaurant8","cuisine_id":"6","cuisine_name":"Indonesian"},{"id":"160","category_id":"14","item_name":"Restaurant9","cuisine_id":"3","cuisine_name":"Chinese"}]

这里是班级

/**
 * Async task class to get json by making HTTP call
 * */
private class GetRestaurant extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(Attractions.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                restaurant = jsonObj.getJSONArray(TAG_ITEM_NAME);

                // looping through All Contacts
                for (int i = 0; i < restaurant.length(); i++) {
                    JSONObject c = restaurant.getJSONObject(i);

                    String id = c.getString(TAG_CUISINE_NAME);

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_CUISINE_NAME, id);


                    // adding contact to contact list
                    restaurantList.add(contact);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(
                Attractions.this, restaurantList,
                R.layout.attractionslayout, new String[] { TAG_ITEM_NAME, TAG_CUISINE_NAME }, new int[] { R.id.item_name,
                        R.id.cuisine_name});

     // Assign adapter to ListView
        listview.setAdapter(adapter);
    }

}

先谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个..

您的回复以JSONArray

开头
[                ==> JSONArray
    {            ==> JSONObject

改变这个..

JSONObject jsonObj = new JSONObject(jsonStr);

// Getting JSON Array node
restaurant = jsonObj.getJSONArray(TAG_ITEM_NAME);

restaurant = new JSONArray(jsonStr);

答案 1 :(得分:0)

你的字符串不是json对象,它是json数组,因为字符串是从第三个括号开始的

所以,试试这个

restaurant = new JSONArray(jsonStr);

您不需要将其转换为josn对象,

 JSONObject jsonObj = new JSONObject(jsonStr);