如何解析JSON数据 [英] How to parse json data

查看:140
本文介绍了如何解析JSON数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用从网页获取JSON数据非常新,所以我有点困惑在这里。如何让Android的这一JSON数据。我正在使用JSON fromat误差

llike此日志猫。

  02-16 21:31:25.093:W / System.err的(22428):org.json.JSONException:值{\"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\"}}在类型的数据org.json.JSONObject不能转换为JSONArray
02-16 21:31:25.133:W / System.err的(22428):在org.json.JSON.typeMismatch(JSON.java:100)
02-16 21:31:25.138:W / System.err的(22428):在org.json.JSONObject.getJSONArray(JSONObject.java:548)
02-16 21:31:25.138:W / System.err的(22428):在auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1807)
02-16 21:31:25.138:W / System.err的(22428):在auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1)
02-16 21:31:25.138:W / System.err的(22428):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-16 21:31:25.138:W / System.err的(22428):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
02-16 21:31:25.138:W / System.err的(22428):在java.lang.Thread.run(Thread.java:856)
02-16 21:36:26.873:W / IInputConnectionWrapper(22428):getSelectedText上的非活动InputConnection
02-16 21:36:26.873:W / IInputConnectionWrapper(22428)上的非活动InputConnection setComposingText
02-16 21:36:26.873:W / IInputConnectionWrapper(22428):getExtractedText上的非活动InputConnection

我有这样fromat JSON数据。

  {
    搞定:[],
    邮报:{
        _event:mydatajson,
         USER_ID:12
    },
    数据:{
        3:{
            ID:1172
            头衔:dsfsdf
        },
        4:{
            ID:1172
            头衔:dsfsdf
        },
        5:{
            ID:1172
            头衔:dsfsdf
        },
        6:{
            ID:1172
            头衔:dsfsdf
        },
        7:{
            ID:1172
            头衔:dsfsdf
        },
        8:{
            ID:1172
            头衔:dsfsdf
        },
        9:{
            ID:1172
            头衔:dsfsdf
        }
    }
}

我试图从Java数据:

 列表<&的NameValuePair GT; mypickDetails =新的ArrayList<&的NameValuePair GT;();
        mypickDetails.add(新BasicNameValuePair(_事件,事件));        mypickDetails.add(新BasicNameValuePair(user_ID的用户ID));
        HttpClient的HC =新DefaultHttpClient();        HttpPost马力=新HttpPost(HttpPath.url);        尝试{            hp.setEntity(新UrlEn codedFormEntity(mypickDetails));            //执行HTTP POST请求
            HTT presponse响应= hc.execute(马力);
            字符串结果= EntityUtils.toString(response.getEntity());           字符串jsontext =新的String(结果);
                //根据JSON格式结果,可以采取的对象                JSONObject的条目=新的JSONObject(jsontext);                JSONArray postListArray = entries.getJSONArray(数据);                的for(int i = 0; I< postListArray.length();我++){
                    Log.d(葛亭价值---,+ - + postListArray.length());
                    JSONObject的postListObj = postListArray.getJSONObject(I)                    字符串myPickName = postListObj.getString(标题);
                    DashboardVariables.mypickname.add(myPickName);
            }

感谢您前进。


解决方案

 数据:{

数据不是 JSONArray 。它是一种的JSONObject

但你必须

  JSONArray postListArray = entries.getJSONArray(数据); //错误

{重新presents一个JSON对象节点

[重新presents JSON数组节点

 数据:{// JSON对象数据
        3:{// json对象3
            ID:1172 // INT
            头衔:dsfsdf//串
        }

使用

 的JSONObject JB =(JSONObject的)entries.getJSONObject(数据);
 的JSONObject 3 = jb.getJSONObject(3);
 INT ID = three.getInt(ID);
 字符串title = three.getString(标题);

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.

解决方案

 "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"); 

这篇关于如何解析JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆