Android JSON解析資料

來源:互聯網
上載者:User

標籤:

一:json的簡介

json指的是Javascript對象標記法,是一種輕量級文本資料交換格式,類似於XML,但比XML更小、更快、更易解析

 

二:Json與XML的比較(copy網上的)

優點:

      比xml格式簡單;
      json是更好的資料交換格式;xml是更好的文檔交換格式;
      json更易於機器閱讀,使用簡單的用戶端庫或者自身支援(javascript);
      json可被瀏覽器用戶端支援;
      可支援各種通用的資料結構,記錄、列表、樹;
      21種語言支援可解析和產生json格式
缺點:

      沒有xml中類似CDATA的特性,不適合傳遞聲音和圖片等位元據;
      json不具備顯示能力,和xml相比;
      json不可擴充,和xml相比。

 

 三:json用於描述資料結構有兩個方式

1,"名稱/值”對的集合,又稱為JSON Object,名與值之前用“:”分隔開來

{name:value}

例如:

{"width":"123","Height":"456"}

 2,值的有序列表,又稱為JSON Array

例如:

{"employee":[{"width":"123" , "height":"345"} , {"width":"234" , "height":"455"}  , {"width":"566" , "height":"269"}]}

 

四:json解析資料需要的jar包

 

五:json資料解析

解析json資料的時候,要分清是解析 JSON Object 還是JSON Array,然後再解析

(1)解析JSON Object之一

例如:解析   {"name" : "value"}

 

通過JSONObject.getString("name")方法就可以得到JSON對象中String名稱的值

//建立JSONObject,將jsonString字串轉換JSON 對象對應的文本

JSONObject demoJson = new JSONObject(jsonString);

String s = demoJson.getString("name");//就可以得到name對應的值

 

(2) 解析 JSON Object之二

一個包括兩個“名稱/值”

{“name1” :“android:” ,“name2” : ”java“}

 

通過JSONObject.getString("name")方法就可以得到JSON對象中String名稱的值

//建立JSONObject,將jsonString字串轉換JSON 對象對應的文本

JSONObject demoJson = new JSONObject(jsonString);

String name1 = demoJson.getString("name1");

String name2 = demoJson.getString("name2");

 

(3) 解析JSON Array

解析json文本  {”number“ :”1,1,3,5“}

//建立JSONArray,將 jsonString字串轉換JSON 對象對應的文本

JSONObject demoJson = new JSONObject(jsonString);

 

//擷取number對用的數組

JSONArray list = demoJson.getJSONArray("number");

for(int i = 0,k = list.length(); i < k; i ++)

{

      //其他的用getString(i),,,類似

       System.out.println(list.getInt(i));

}

 

(4)解析JSON Oject與JSON Array混合對象

{"books" : [{"zhang" : "value1" , "zhang" : "value2"}]}

JSONObject demoJson = new JSONObject(jsonString);

//首先是要擷取books對應的值

JSONArray list = demoJson.getJSONArray("books");

//然後依次取出list裡面的值

for(int i = 0, k = list.length() ; i < k; i++)

{

   //第i個JSONArray中的值為JSON Object “名稱/值”對,然後通過getString("zhang")來擷取值

    System.out.println(list.getJSONObject( i ).getString("zhang"));

}

 

 伺服器裡面的資料

 

package com.test.Demo;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class JSONDemoServlet extends HttpServlet {private static final long serialVersionUID = -7368225680407826408L;       private List<User> list;        /**     * 處理post方式提交的資料     */@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}/** * 出來get方式提交的資料 */@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/plain");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter(); //準備使用者資料       prepareData();        //JSON數組      JSONArray array = new JSONArray();      for(User bean :list){         //單個使用者JSON對象    JSONObject obj = new JSONObject();    try{      obj.put("id", bean.getId());   obj.put("name", bean.getName());   obj.put("email", bean.getEmail());   obj.put("gender", bean.getGender());     }catch (Exception e) {// TODO: handle exception}  //array.put(obj);   array.add(obj);   }    //輸出      out.write(array.toString());      out.flush();      out.close(); } private void prepareData()   {list = new ArrayList<User>();User bean1 = new User();bean1.setId(1001); bean1.setName("Tony"); bean1.setEmail("[email protected]"); bean1.setGender("male");  list.add(bean1); User bean2 = new User();bean2.setId(1002);bean2.setName("Jack");     bean2.setEmail("[email protected]");    bean2.setGender("male");      list.add(bean2);         User bean3 = new User();    bean3.setId(1003);       bean3.setName("Marry");    bean3.setEmail("[email protected]");    bean3.setGender("female");    list.add(bean3);        User bean4 = new User();    bean4.setId(1004);     bean4.setName("Linda");    bean4.setEmail("[email protected]");      bean4.setGender("female");     list.add(bean4);       }}

 

 

 

所對應的對象文本為:

package com.test.Demo;public class User {private int id;private String name;private String email;private String gender;public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

 

 

 

在用戶端建立TextView來顯示解析的資料

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/textView"        android:layout_width="fill_parent"        android:layout_height="wrap_content" /></LinearLayout>

 


主MainActivity

 

package com.test;import java.io.BufferedReader;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.json.JSONArray;import org.json.JSONObject;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);try {StringBuffer sb = new StringBuffer();String url = "http://192.168.1.100:8080/article/JSONDemoServlet";String body = getContent(url);JSONArray array = new JSONArray(body);for (int i = 0; i < array.length(); i++) {JSONObject obj = array.getJSONObject(i);sb.append("id:").append(obj.getInt("id")).append("\t");sb.append("name:").append(obj.getString("name")).append("\r\n");sb.append("gender:").append(obj.getString("gender")).append("\t");sb.append("email:").append(obj.getString("email")).append("\r\n");sb.append("----------------------\r\n");}TextView textView = (TextView) findViewById(R.id.textView);textView.setText(sb.toString());} catch (Exception e) {// TODO: handle exception}}private String getContent(String url) throws Exception {StringBuilder sb = new StringBuilder();HttpClient client = new DefaultHttpClient();HttpParams httpParams = client.getParams();// 設定網路逾時參數HttpConnectionParams.setConnectionTimeout(httpParams, 3000);HttpConnectionParams.setSoTimeout(httpParams, 5000);HttpResponse response = client.execute(new HttpGet(url));HttpEntity entity = response.getEntity();if (entity != null) {BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"), 8192);String line = null;while ((line = reader.readLine()) != null) {sb.append(line + "\n");}reader.close();}return sb.toString();}}

 

Android JSON解析資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.