how to parse JSONArray in android

2018-12-31 22:47发布

问题:

I want to read this JSON lines but because it start with JSONArray i\'m a little confused

 \"abridged_cast\": [
            {
                \"name\": \"Jeff Bridges\",
                \"id\": \"162655890\",
                \"characters\": [
                    \"Jack Prescott\"
                ]
            },
            {
                \"name\": \"Charles Grodin\",
                \"id\": \"162662571\",
                \"characters\": [
                    \"Fred Wilson\"
                ]
            },
            {
                \"name\": \"Jessica Lange\",
                \"id\": \"162653068\",
                \"characters\": [
                    \"Dwan\"
                ]
            },
            {
                \"name\": \"John Randolph\",
                \"id\": \"162691889\",
                \"characters\": [
                    \"Capt. Ross\"
                ]
            },
            {
                \"name\": \"Rene Auberjonois\",
                \"id\": \"162718328\",
                \"characters\": [
                    \"Bagley\"
                ]
            }
        ],

i just need to use the \"name\" and save all as one String. (the string value will be : Jeff Bridges,Charles Grodin,Jessica Lange,John Randolph,Rene Auberjonois).

this is my code:

try {
        //JSON is the JSON code above

        JSONObject jsonResponse = new JSONObject(JSON);
        JSONArray movies = jsonResponse.getJSONArray(\"characters\");
        String hey = movies.toString();


    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

回答1:

If you\'re after the \'name\', why does your code snippet look like an attempt to get the \'characters\'?

Anyways, this is no different from any other list- or array-like operation: you just need to iterate over the dataset and grab the information you\'re interested in. Retrieving all the names should look somewhat like this:

List<String> allNames = new ArrayList<String>();

JSONArray cast = jsonResponse.getJSONArray(\"abridged_cast\");
for (int i=0; i<cast.length(); i++) {
    JSONObject actor = cast.getJSONObject(i);
    String name = actor.getString(\"name\");
    allNames.add(name);
}

(typed straight into the browser, so not tested).



回答2:

getJSONArray(attrname) will get you an array from the object of that given attribute name in your case what is happening is that for

{\"abridged_cast\":[\"name\": blah...]}
^ its trying to search for a value \"characters\"

but you need to get into the array and then do a search for \"characters\"

try this

String json=\"{\'abridged_cast\':[{\'name\':\'JeffBridges\',\'id\':\'162655890\',\'characters\':[\'JackPrescott\']},{\'name\':\'CharlesGrodin\',\'id\':\'162662571\',\'characters\':[\'FredWilson\']},{\'name\':\'JessicaLange\',\'id\':\'162653068\',\'characters\':[\'Dwan\']},{\'name\':\'JohnRandolph\',\'id\':\'162691889\',\'characters\':[\'Capt.Ross\']},{\'name\':\'ReneAuberjonois\',\'id\':\'162718328\',\'characters\':[\'Bagley\']}]}\";

    JSONObject jsonResponse;
    try {
        ArrayList<String> temp = new ArrayList<String>();
        jsonResponse = new JSONObject(json);
        JSONArray movies = jsonResponse.getJSONArray(\"abridged_cast\");
        for(int i=0;i<movies.length();i++){
            JSONObject movie = movies.getJSONObject(i);
            JSONArray characters = movie.getJSONArray(\"characters\");
            for(int j=0;j<characters.length();j++){
                temp.add(characters.getString(j));
            }
        }
        Toast.makeText(this, \"Json: \"+temp, Toast.LENGTH_LONG).show();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

checked it :)



回答3:

Here is a better way for doing it. Hope this helps

protected void onPostExecute(String result) {
                Log.v(TAG + \" result);


                if (!result.equals(\"\")) {

                    // Set up variables for API Call
                    ArrayList<String> list = new ArrayList<String>();

                    try {
                        JSONArray jsonArray = new JSONArray(result);

                        for (int i = 0; i < jsonArray.length(); i++) {

                            list.add(jsonArray.get(i).toString());

                        }//end for
                    } catch (JSONException e) {
                        Log.e(TAG, \"onPostExecute > Try > JSONException => \" + e);
                        e.printStackTrace();
                    }


                    adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
                    listView.setAdapter(adapter);
                    listView.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                            // ListView Clicked item index
                            int itemPosition = position;

                            // ListView Clicked item value
                            String itemValue = (String) listView.getItemAtPosition(position);

                            // Show Alert
                            Toast.makeText( ListViewData.this, \"Position :\" + itemPosition + \"  ListItem : \" + itemValue, Toast.LENGTH_LONG).show();
                        }
                    });

                    adapter.notifyDataSetChanged();
...