json的解析
来源:互联网 发布:土木工程词典 知乎 编辑:程序博客网 时间:2024/06/05 03:11
一、概念
什么是json
简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
二、特点
(1)表示名称键值对
这个比较简单,表示的形式如下:
按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" }
(2)表示数组
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
这个比较简单,表示的形式如下:
按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" }
(2)表示数组
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ]}
三、原生解析
1.原生解析
(1)将json格式的字符串{}解析为对象
private void jsonToJavaObjectByNative() { // 1 获取或创建JSON数据 String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; ShopInfo shopInfo = null; // 2 解析json try { JSONObject jsonObject = new JSONObject(json);// int id = jsonObject.getInt("id"); int id1 = jsonObject.optInt("id"); String name = jsonObject.optString("name"); double price = jsonObject.optDouble("price"); String imagePath = jsonObject.optString("imagePath"); // 封装Java对象 shopInfo = new ShopInfo(id1, name, price, imagePath); } catch (JSONException e) { e.printStackTrace(); } // 3 显示JSON数据 tv_native_orignal.setText(json); tv_native_last.setText(shopInfo.toString()); }
(2)将json字符串转换成对象的List
private void jsonToJavaObjectByNative() { // 1 获取或创建JSON数据 String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; ShopInfo shopInfo = null; // 2 解析json try { JSONObject jsonObject = new JSONObject(json);// int id = jsonObject.getInt("id"); int id1 = jsonObject.optInt("id"); String name = jsonObject.optString("name"); double price = jsonObject.optDouble("price"); String imagePath = jsonObject.optString("imagePath"); // 封装Java对象 shopInfo = new ShopInfo(id1, name, price, imagePath); } catch (JSONException e) { e.printStackTrace(); } // 3 显示JSON数据 tv_native_orignal.setText(json); tv_native_last.setText(shopInfo.toString()); }
(3)嵌套的json的解析
对于这样形式的json对象字符串,需要进行一层一层的解析
private void jsonToJavaOfComplex() { // 1 获取或创建JSON数据 String json = "{\n" + " \"data\": {\n" + " \"count\": 5,\n" + " \"items\": [\n" + " {\n" + " \"id\": 45,\n" + " \"title\": \"坚果\"\n" + " },\n" + " {\n" + " \"id\": 132,\n" + " \"title\": \"炒货\"\n" + " },\n" + " {\n" + " \"id\": 166,\n" + " \"title\": \"蜜饯\"\n" + " },\n" + " {\n" + " \"id\": 195,\n" + " \"title\": \"果脯\"\n" + " },\n" + " {\n" + " \"id\": 196,\n" + " \"title\": \"礼盒\"\n" + " }\n" + " ]\n" + " },\n" + " \"rs_code\": \"1000\",\n" + " \"rs_msg\": \"success\"\n" + "}"; // 封装Java对象 DataInfo dataInfo = new DataInfo(); // 2 解析json try { JSONObject jsonObject = new JSONObject(json); // 第一层解析 JSONObject data = jsonObject.optJSONObject("data"); String rs_code = jsonObject.optString("rs_code"); String rs_msg = jsonObject.optString("rs_msg"); // 第一层封装 dataInfo.setRs_code(rs_code); dataInfo.setRs_msg(rs_msg); DataInfo.DataBean dataBean = new DataInfo.DataBean(); dataInfo.setData(dataBean); // 第二层解析 int count = data.optInt("count"); JSONArray items = data.optJSONArray("items"); // 第二层数据的封装 dataBean.setCount(count); List<DataInfo.DataBean.ItemsBean> itemsBean = new ArrayList<>(); dataBean.setItems(itemsBean); // 第三层解析 for (int i = 0; i < items.length(); i++) { JSONObject jsonObject1 = items.optJSONObject(i); if (jsonObject1 != null) { int id = jsonObject1.optInt("id"); String title = jsonObject1.optString("title"); // 第三层数据的封装 DataInfo.DataBean.ItemsBean bean = new DataInfo.DataBean.ItemsBean(); bean.setId(id); bean.setTitle(title); itemsBean.add(bean); } } } catch (JSONException e) { e.printStackTrace(); } // 3 显示JSON数据 tv_native_orignal.setText(json); tv_native_last.setText(dataInfo.toString()); }
四、Gson解析
可以看出来通过原生的方式来进行解析还是比较困难的
(1)将json格式的字符串{}解析为对象
private void jsonToJavaObjectByGson() { // 1 获取或创建JSON数据 String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; // 2 解析JSON数据 Gson gson = new Gson(); ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class); // 3 展示数据 tv_gson_orignal.setText(json); tv_gson_last.setText(shopInfo.toString()); }如下是ShopInfo对象
public class ShopInfo { private int id; private String name; private double price; private String imagePath; public ShopInfo(int id, String name, double price, String imagePath) { this.id = id; this.name = name; this.price = price; this.imagePath = imagePath; } public ShopInfo() { } 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; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } @Override public String toString() { return "ShopInfo{" + "id=" + id + ", name='" + name + '\'' + ", price=" + price + ", imagePath='" + imagePath + '\'' + '}'; }}
(2)将json字符串解析成对象的List
private void jsonToJavaListByGson() { // 1 获取或创建JSON数据 String json = "[\n" + " {\n" + " \"id\": 1,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" + " \"name\": \"大虾1\",\n" + " \"price\": 12.3\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" + " \"name\": \"大虾2\",\n" + " \"price\": 12.5\n" + " }\n" + "]"; // 2 解析JSON数据 Gson gson = new Gson(); List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() { }.getType()); // 3 展示数据 tv_gson_orignal.setText(json); tv_gson_last.setText(shops.toString()); }
(3)将java对象转换成json字符串
private void javaToJsonObjectByGson() { // 1 获取或创建Java对象 ShopInfo shopInfo = new ShopInfo(1,"鲍鱼",250.0,"baoyu"); // 2 生成JSON数据 Gson gson = new Gson(); String json = gson.toJson(shopInfo); // 3 展示数据 tv_gson_orignal.setText(shopInfo.toString()); tv_gson_last.setText(json); }
(4)将java对象List转换成json字符串
好的的方法都已经封装好了,使用起来还是挺给力的
private void javaToJsonArrayByGson() { // 1 获取或创建Java对象 List<ShopInfo> shops = new ArrayList<>(); ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu"); ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia"); shops.add(baoyu); shops.add(longxia); // 2 生成JSON数据 Gson gson = new Gson(); String json = gson.toJson(shops); // 3 展示数据 tv_gson_orignal.setText(shops.toString()); tv_gson_last.setText(json); }
五、FastJson解析
(1)将json格式的字符串{}解析为对象
private void jsonToJavaObjectByFastJson() { // 1 获取或创建json数据 String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" + "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n"; // 2 解析JSON数据 ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class); // 3 显示数据 tv_fastjson_orignal.setText(json); tv_fastjson_last.setText(shopInfo.toString()); }
private void jsonToJavaListByFastJson() { // 1 获取或创建json数据 String json = "[\n" + " {\n" + " \"id\": 1,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n" + " \"name\": \"大虾1\",\n" + " \"price\": 12.3\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" + " \"name\": \"大虾2\",\n" + " \"price\": 12.5\n" + " }\n" + "]"; // 2 解析JSON数据 List<ShopInfo> shopInfos = JSON.parseArray(json, ShopInfo.class); // 3 显示数据 tv_fastjson_orignal.setText(json); tv_fastjson_last.setText(shopInfos.toString()); }
(3)将java对象转换成json字符串
private void javaToJsonObjectByFastJson() { // 1 创建一个Java对象 ShopInfo shopInfo = new ShopInfo(1, "鲍鱼", 250.0, "baoyu"); // 2 生成JSON数据 String json = JSON.toJSONString(shopInfo); // 3 显示数据 tv_fastjson_orignal.setText(shopInfo.toString()); tv_fastjson_last.setText(json); }
(4)将java对象List转换成json字符串
private void javaToJsonArrayByFastJson() { // 1 创建一个Java集合 List<ShopInfo> shops = new ArrayList<>(); ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250.0, "baoyu"); ShopInfo longxia = new ShopInfo(2, "龙虾", 251.0, "longxia"); shops.add(baoyu); shops.add(longxia); // 2 生成JSON数据 String json = JSON.toJSONString(shops); // 3 显示JSON数据 tv_fastjson_orignal.setText(shops.toString()); tv_fastjson_last.setText(json); }
阅读全文
1 0
- json对象的解析,jquery 解析json
- json的解析方式
- Android的JSON解析
- json 的数据解析
- 解析JSON的过程
- jQuery的JSON解析
- JSON的解析
- 解析JSON的例子
- JSON数据的解析
- Android的Json解析
- Android的JSON解析
- Json的解析
- Android的JSON解析
- android json的解析
- 关于json的解析
- 解析自己的json
- 另类Json的解析
- JSon数据的解析
- Android技巧之drawablePadding设置
- Restful
- ionic 1页面跳转登录页面后,返回按钮处理
- Gamma codes(γ 编码)的编码和解码过程(encoding and decoding of Gamma codes)
- 如何用一个java程序来判断一个xml文件是否符合一个DTD的要求
- json的解析
- 关于Tomcat运行原理的一些分析
- 讲一讲WiFi快连、SmartConfig、SmartConnect
- python中MySQLdb模块用法实例
- sql查找表中某个字段值相同,其他字段取最大值的记录
- 算法导论 练习题 17.3-6
- opencv3.2安装opencv_contrib
- 线程池控制输出CountDownLatch同步计数器
- phabricator实战使用