JSON学习笔记

来源:互联网 发布:网络上hx是什么意思 编辑:程序博客网 时间:2024/06/03 14:18

一 理解JSON

*JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

* 本质就是具有特定格式的字符串

* JSON 数据是客户端与服务器端交互的最常用的选择

二 JSON 数据格式

1) 整体结构:

* Json 数组 : [ ]

* Json 对象 : { }

2) Json 数据的结构 : [value1, value2, value3]

3) Json 对象的结构 : {key1 : value1, key2 : value2, key3 : value3}

4) key 的数据类型 : 字符串

5) value 的数据类型:

* 数值

* 字符串

* null

* json 数组 [ ]

* json 对象 { }

三 相关API

1) Android 原生 API:

① JsonObject : json 对象 { }

JSONObject(String json) : 将 json 字符串解析为 json 对象

Xxx getXxx(String name) : 根据name, 在json 对象中得到对应的Value

② JsonArray : json 数组 [ ]

JSONArray(String json) : 将json 字符串解析为json shuzu

int length() : 得到json 数组中元素的个数

Xxx getXxx(int index) : 根据下标得到json数组中对应的元素数据

2) Gson 框架 API

① Gson : 能解析 json 数据的类

Gson() : 构造对象的方法

String toJson(Object src ) : 将对象转换为对应格式的json 字符串

T fromJson(String json Type typeOfT) : 解析Json 字符串,得到对象

② TypeToken<T> : 用来得到Type 的类

四 代码

1) 将json 格式的字符串{}转换为Java对象
public class JsonTest extends AndroidTestCase{/* * 1. 将json 格式的字符串{}转换为Java对象,使用原生API */public void testJsonToObject() throws JSONException{String jsonString = "{\"id\":2,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"}";//将json字符串封装为JSONObject对象JSONObject jsonObject = new JSONObject(jsonString);//从对象中根据key得到对应的valueint id = jsonObject.getInt("id");String name = jsonObject.getString("name");double price = jsonObject.getDouble("price");String imagePath = jsonObject.getString("imagePath");//封装ShopInfo对象ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);Log.e("TAG", shopInfo.toString());}/* * 2. 将json 格式的字符串{}转换为Java对象,使用Gson */public void testJsonToObject2(){String jsonString = "{\"id\":3,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"}";ShopInfo shopInfo = new Gson.fromJson(jsonString, ShopInfo.class);Log.e("TAG", shopInfo.toString());}}

2) 将 json 格式的字符串 [ ] 转换为java对象的List
/* * 3. 将json 格式的字符串[]转换为Java对象的List,使用原生API */public void testJsonToList() throws JSONException{String jsonString = "[{\"id\":1,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"},"+"{\"id\":2,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"}]";List<ShopInfo> list = new ArrayList<ShopInfo>();//将json字符串封装为JSONObject对象JSONArray jsonArray = new JSONArray(jsonString);//遍历JSONArray对象所以元素(JSONObject),并将每个元素封装为shopInfo,并添加懂啊Listfor(int i = 0;i<jsonArray.length();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);//从对象中根据key得到对应的valueint id = jsonObject.getInt("id");String name = jsonObject.getString("name");double price = jsonObject.getDouble("price");String imagePath = jsonObject.getString("imagePath");//封装ShopInfo对象ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);list.add(shopInfo);}Log.e("TAG", list.toString());}/* * 4. 将json 格式的字符串[]转换为Java对象的List,使用Gson */public void testJsonToList2() throws JSONException{String jsonString = "[{\"id\":4,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"},"+"{\"id\":2,\"name\":\"虾\",\"price\":12.3,\"imagePath\":\"http://11.14.4.160:8080/1.jpg\"}]";List<ShopInfo> list = new Gson().fromJson(jsonString, new TypeToken<List<ShopInfo>>(){}.getType());Log.e("TAG", list.toString());}
3) 将Java对象转换为json字符串{}

/* * 5. 将Java对象转换为json字符串{},使用Gson */public void testObjectToJson(){ShopInfo info = new ShopInfo(3,"KK",1000,"http://www.sina.com");String json = new Gson().toJson(info);Log.e("TAG", json);}
4) 将Java对象的List转换为json字符串[ ]
/* * 6. 将Java对象的List转换为json字符串[],使用Gson */public void testListToJson(){List<ShopInfo> list = new ArrayList<ShopInfo>();list.add(new ShopInfo(3,"KK",1000,"http://www.sina.com"));list.add(new ShopInfo(4,"KK",2000,"http://www.sina.com"));String json = new Gson().toJson(list);Log.e("TAG", json);}
5) 使用Map封装json对象key特别情况
/* * 7. 使用Map封装json对象key特别情况 */public void testJsonToMap(){String jsonString = "{\"my name\":\"虾\",\"1\":12}";Map<String,Object> map = new Gson().fromJson(jsonString,new TypeToken<Map<String,Object>>(){}.getType());Log.e("TAG", map.toString());}



0 0
原创粉丝点击