Android学习第十八天----JSON解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
JSON建构有两种结构:
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
对于网络中的数据,必须自己搭建服务器,然后从自己的服务器上取出数据。
创建实体类,
package cn.will.entity; public class Books { private Integer bookId; private String bookName; private String bookPrice; public Books() { super(); } public Books(Integer bookId, String bookName, String bookPrice) { super(); this.bookId = bookId; this.bookName = bookName; this.bookPrice = bookPrice; } public Integer getBookId() { return bookId; } public void setBookId(Integer bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getBookPrice() { return bookPrice; } public void setBookPrice(String bookPrice) { this.bookPrice = bookPrice; } @Override public String toString() { return "Books [bookId=" + bookId + ", bookName=" + bookName + ", bookPrice=" + bookPrice + "]"; } }
创建服务端的类,
package cn.core.service; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import cn.core.entity.Books; public class JSONTextService { public static List<Books> getJsonInputStream() throws SocketTimeoutException, MalformedURLException, IOException, JSONException { InputStream is = null; URL url = new URL( "http://192.168.1.20:8080/javawebjson/XMLServlet?format=json"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { is = conn.getInputStream(); } return jsonPrase(is); } public static List<Books> jsonPrase(InputStream is) throws JSONException, IOException { List<Books> list = new ArrayList<Books>(); Books book = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len; while ((len = is.read(b)) != -1) { baos.write(b, 0, len); } byte[] jsonByte = baos.toByteArray(); String Str = new String(jsonByte); JSONArray jsonArray = new JSONArray(Str); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); book = new Books(); book.setBookId(jsonObject.getInt("id")); book.setBookName(jsonObject.getString("name")); book.setBookPrice(jsonObject.getString("price")); list.add(book); } return list; } }
mainactivity中
package cn.core.test; import java.io.IOException; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.util.List; import org.json.JSONException; import android.app.ListActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ArrayAdapter; import cn.core.entity.Books; import cn.core.service.JSONTextService; public class MainActivity extends ListActivity { private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { setListAdapter(new ArrayAdapter<Books>(MainActivity.this, android.R.layout.simple_list_item_1, (List<Books>) msg.obj)); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); List<Books> list; new Thread(new Runnable() { @Override public void run() { try { Message msg = new Message(); List mData; mData = JSONTextService.getJsonInputStream(); msg.obj = mData; handler.sendMessage(msg); } catch (SocketTimeoutException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }).start(); } }