Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am very new in Using Getting JSON data from web, SO I am little confused here. How to get this JSON data in android: I am getting error in json fromat.

llike this in log cat.

02-16 21:31:25.093: W/System.err(22428): org.json.JSONException: Value {"3":{"ID":1172,"title":"dsfsdf"},"9":{"ID":1172,"title":"dsfsdf"},"8":{"ID":1172,"title":"dsfsdf"},"7":{"ID":1172,"title":"dsfsdf"},"6":{"ID":1172,"title":"dsfsdf"},"5":{"ID":1172,"title":"dsfsdf"},"4":{"ID":1172,"title":"dsfsdf"}} at data of type org.json.JSONObject cannot be converted to JSONArray
02-16 21:31:25.133: W/System.err(22428):    at org.json.JSON.typeMismatch(JSON.java:100)
02-16 21:31:25.138: W/System.err(22428):    at org.json.JSONObject.getJSONArray(JSONObject.java:548)
02-16 21:31:25.138: W/System.err(22428):    at auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1807)
02-16 21:31:25.138: W/System.err(22428):    at auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1)
02-16 21:31:25.138: W/System.err(22428):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-16 21:31:25.138: W/System.err(22428):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-16 21:31:25.138: W/System.err(22428):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-16 21:31:25.138: W/System.err(22428):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-16 21:31:25.138: W/System.err(22428):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-16 21:31:25.138: W/System.err(22428):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-16 21:31:25.138: W/System.err(22428):    at java.lang.Thread.run(Thread.java:856)
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): getSelectedText on inactive InputConnection
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): setComposingText on inactive InputConnection
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): getExtractedText on inactive InputConnection

I have Json data like this fromat.

{
    "get": [],
    "post": {
        "_event": "mydatajson",
         "user_id": "12"
    },
    "data": {
        "3": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "4": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "5": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "6": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "7": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "8": {
            "ID": 1172,
            "title": "dsfsdf"
        },
        "9": {
            "ID": 1172,
            "title": "dsfsdf"
        }
    }
}

What i try to get data from java:

List<NameValuePair> mypickDetails=new ArrayList<NameValuePair>();
        mypickDetails.add(new BasicNameValuePair("_event", event));

        mypickDetails.add(new BasicNameValuePair("user_id", userID));


        HttpClient hc=new DefaultHttpClient();

        HttpPost hp=new HttpPost(HttpPath.url);

        try {

            hp.setEntity(new UrlEncodedFormEntity(mypickDetails));

            // Execute HTTP Post Request
            HttpResponse response=hc.execute(hp);


            String result = EntityUtils.toString(response.getEntity());

           String jsontext = new String(result);


                //take object according to json format result                        

                JSONObject entries = new JSONObject(jsontext);

                JSONArray postListArray = entries.getJSONArray("data");

                for (int i = 0; i < postListArray.length(); i++) {
                    Log.d("Geting Value---", "+----"+postListArray.length());
                    JSONObject postListObj = postListArray.getJSONObject(i);

                    String myPickName = postListObj.getString("title");


                    DashboardVariables.mypickname.add(myPickName);




            }

Thank you advance.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
135 views
Welcome To Ask or Share your Answers For Others

1 Answer

 "data": {

data is not a JSONArray. Its a JSONObject.

But you have

 JSONArray postListArray = entries.getJSONArray("data"); // wrong

{ represents a json object node

[ represents a json array node

"data": { // json object data
        "3": { // json object 3
            "ID": 1172,  // int 
            "title": "dsfsdf" // string

        }

Use

 JSONObject jb = (JSONObject)entries.getJSONObject("data");   
 JSONObject three = jb.getJSONObject("3");
 int id = three.getInt("ID");
 String title = three.getString("title"); 

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...