继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

看懂这篇文章,让你简单懂得解析Json字符串

饮歌长啸
关注TA
已关注
手记 188
粉丝 46
获赞 152

本篇文章全部以示例为主,方便大家简单易懂!
{
    "condition": "ooppp",
    "data": [
        {
            "date": "2013-08-29 12:32:31",
            "message": "xxxxxxxxxx",
            "utime": "2013-08-29 12:32:31"
        },
        {
            "date": "2013-08-29 12:32:31",
            "message": "xxxxxxxxxx",
            "utime": "2013-08-29 12:32:31"
        },
        {
            "date": "2013-08-29 12:32:31",
            "message": "xxxxxxxxxx",
            "utime": "2013-08-29 12:32:31"
        },
        {
            "date": "2013-08-29 12:32:31",
            "message": "xxxxxxxxxx",
            "utime": "2013-08-29 12:32:31"
        }
    ],
    "ischeck": "1",
    "state": "0",
    "status": "200",
    "xxu": "61995"
}


把上面的解析出来:

str表示服务器返回来的字符串(上)

 try {
   JSONObject jo = new JSONObject(str);
   System.out.println(jo.toString());
   JSONArray  ja = new JSONArray(jo.getString("data"));
   System.out.println(ja.toString());
   for (int i = 0; i < 4; i++) {
    JSONObject temp = (JSONObject) ja.get(i);
    System.out.println(temp.getString("date")+"  "+temp.getString("message")+"  "+temp.getString("utime"));
   }
  } catch (JSONException e) {
   // TODO 自动生成的 catch 块
   e.printStackTrace();
  }




代码构建json字符串:一般以字符串的形式传给服务器
package sn.len.json;  
  
import org.json.JSONArray;  
import org.json.JSONException;  
import org.json.JSONObject;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
  
public class JSONActivity extends Activity {  
    private String jsondata;  
    @Override  
    public void onCreate(Bundle savedInstanceState)   
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        try   
        {  
            //调用构建JSON字符串方法   
            buildJson();  
        }  
        catch (JSONException e)   
        {  
            e.printStackTrace();  
        }  
    }  
    //构建JSON字符串   
    public void buildJson() throws JSONException  
    {  
        JSONArray json=new JSONArray();  
        JSONObject jsonObj=new JSONObject();  
        for(int i=0;i<2;i++)  
        {  
            jsonObj.put("id", "001");  
            jsonObj.put("age", "20");  
            jsonObj.put("name", "snoanw");  
            //把每个数据当作一对象添加到数组里   
            json.put(jsonObj);  
        }  
        jsondata=json.toString();  
        Log.i("JSON", jsondata);  
        //调用解析JSON方法   
        parserJson(jsondata);  
    }  
    // 解析JSON字符串   
    public void parserJson(String jsondata) throws JSONException  
    {  
        //构建JSON数组对象   
        JSONArray json1=new JSONArray(jsondata);  
        for(int i=0;i<json1.length();i++)  
        {  
            JSONObject jsonObj2=json1.optJSONObject(i);  
            String id=jsonObj2.getString("id");  
            String age=jsonObj2.getString("age");  
            String name=jsonObj2.getString("name");  
            Log.i("JSONDATA", id+age+name);  
        }  
    }  
}  

构建成的样子:
 [{"id":"001","name":"snonaw","age":"20"},{"id":"002","name":"chace","age":"23"}]




服务器返回的字符串:
{
    "userbean": {
        "Showname": "u75afu72c2u7684u7334u5b50",
        "State": 1,
        "Uid": "100196"
    }
}

代码解析:builder.toString()代表请求服务器时,服务器返回的字符串

JSONObject jsonObject = new JSONObject(builder.toString()).getJSONObject("userbean");

                String Uid; 
                String Showname; 
                String Avtar; 
                String State;

                Uid = jsonObject.getString("Uid"); 
                Showname = jsonObject.getString("Showname"); 
                Avtar = jsonObject.getString("Avtar"); 
                State = jsonObject.getString("State");





服务器返回的字符串:
{
    "calendar": {
        "calendarlist": [
            {
                "allDay": false,
                "calendar_id": "1705",
                "category_name": "u9ed8u8ba4u5206u7c7b",
                "endshowtime": "1288931400",
                "showtime": "1288927800",
                "title": "(u4eb2u5b50)ddssd"
            },
            {
                "allDay": false,
                "calendar_id": "1706",
                "category_name": "u9ed8u8ba4u5206u7c7b",
                "endshowtime": "1288936800",
                "showtime": "1288933200",
                "title": "(u65c5u884c)"
            }
        ]
    }
}


代码解析服务器返回的字符串:builder.toString()同样代表服务器返回的字符串

SONObject jsonObject = new JSONObject(builder.toString()) .getJSONObject("calendar"); 
        JSONArray jsonArray = jsonObject.getJSONArray("calendarlist"); 
                    for(int i=0;i<jsonArray.length();i++){ 

                        JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i); 
                        CalendarInfo calendarInfo = new CalendarInfo(); 
                        calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id"));
                        calendarInfo.setTitle(jsonObject2.getString("title")); 
                        calendarInfo.setCategory_name(jsonObject2.getString("category_name")); 
                        calendarInfo.setShowtime(jsonObject2.getString("showtime")); 
                        calendarInfo.setEndtime(jsonObject2.getString("endshowtime")); 
                        calendarInfo.setAllDay(jsonObject2.getBoolean("allDay")); 
                        calendarInfos.add(calendarInfo); 

}




单数据    {'singer':{'id':1,'name':'tom','gender':'男'}}   
多个数据  {'singers':[{'id':'2','name':'tom','gender':'男'},{'id':'3','name':'jerry','gender':'男'},{'id':'4','name':'jim','gender':'男'},{'id':'5','name':'lily','gender':'女'}]} 


{
    "singer": {
        "gender": "男",
        "id": 1,
        "name": "tom"
    }
}



{
    "singers": [
        {
            "gender": "男",
            "id": "2",
            "name": "tom"
        },
        {
            "gender": "男",
            "id": "3",
            "name": "jerry"
        },
        {
            "gender": "男",
            "id": "4",
            "name": "jim"
        },
        {
            "gender": "女",
            "id": "5",
            "name": "lily"
        }
    ]
}


public class JsonActivity extends Activity {   
    /** Called when the activity is first created. */   
    private TextView tvJson;   
    private Button btnJson;   
    private Button btnJsonMulti;   
    @Override   
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        tvJson = (TextView) this.findViewById(R.id.tvJson);   
        btnJson = (Button) this.findViewById(R.id.btnJson);   
        btnJsonMulti = (Button) this.findViewById(R.id.btnJsonMulti);   
        btnJson.setOnClickListener(new View.OnClickListener() {   
            @Override   
            public void onClick(View v) {   
                // url   
                // String strUrl = "http://10.158.166.110:8080/AndroidServer/JsonServlet";   
                String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGER);   
                //获得返回的Json字符串   
                String strResult = connServerForResult(strUrl);   
                //解析Json字符串   
                parseJson(strResult);   
            }   
        });   
        btnJsonMulti.setOnClickListener(new View.OnClickListener() {   
            @Override   
            public void onClick(View v) {   
                String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGERS);   
                String strResult = connServerForResult(strUrl);   
                //获得多个Singer   
                parseJsonMulti(strResult);   
            }   
        });   
    }   
    private String connServerForResult(String strUrl) {   
        // HttpGet对象   
        HttpGet httpRequest = new HttpGet(strUrl);   
        String strResult = "";   
        try {   
            // HttpClient对象   
            HttpClient httpClient = new DefaultHttpClient();   
            // 获得HttpResponse对象   
            HttpResponse httpResponse = httpClient.execute(httpRequest);   
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {   
                // 取得返回的数据   
                strResult = EntityUtils.toString(httpResponse.getEntity());   
            }   
        } catch (ClientProtocolException e) {   
            tvJson.setText("protocol error");   
            e.printStackTrace();   
        } catch (IOException e) {   
            tvJson.setText("IO error");   
            e.printStackTrace();   
        }   
        return strResult;   
    }   
    // 普通Json数据解析   
    private void parseJson(String strResult) {   
        try {   
            JSONObject jsonObj = new JSONObject(strResult).getJSONObject("singer");   
            int id = jsonObj.getInt("id");   
            String name = jsonObj.getString("name");   
            String gender = jsonObj.getString("gender");   
            tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:" + gender);   
        } catch (JSONException e) {   
            System.out.println("Json parse error");   
            e.printStackTrace();   
        }   
    }   
    //解析多个数据的Json  
    private void parseJsonMulti(String strResult) {   
        try {   
            JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers");   
            String s = "";   
            for(int i = 0; i < jsonObjs.length() ; i++){   
                JSONObject jsonObj = (JSONObject)jsonObjs.get(i);   
                int id = jsonObj.getInt("id");   
                String name = jsonObj.getString("name");   
                String gender = jsonObj.getString("gender");   
                s +=  "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ;   
            }   
            tvJson.setText(s);   
        } catch (JSONException e) {   
            System.out.println("Jsons parse error !");   
            e.printStackTrace();   
        }   
    }   
}   

原文链接:http://www.apkbus.com/blog-784586-61287.html

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP