Android开发之JSON数据解析和生成
2014-11-30 21:51
495 查看
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快)(转至百度百科)。
在Android开发中JSON数据的解析和生成非常的常见。先上今天的JSON例子吧
和之前的XML一样,以上面的json数据为基础,开始进行解析和生成。
1、用org.json.JSONObject包的解析器进行解析。参考以下代码
2、以上代码可以万全的解析出来需要的JSON数据。但是,当JSON数据量大的时候,我们不可能这样去一行一行的写代码去解析。那么,我们需要用到第三方的JSON解析JAR包。这里博主介绍谷歌提供的GSONjar包。
用GSON解析的时候,我们需要和之前XML文件一样,将需要的解析的数据定义成为一个类。在定义类的时候,我们需要注意,当整个JSON数据里面包含数组的时候,我们需要将这个数组里面的数据从新定义成一个类。请参考一下代码,这是根据今天的JSONS数据定义出来的两个类。第一个为Order,第二个为JSON数组里面包含数据的类OrderItem.
Order类
OrderItem类
那么有了这两个类之后,在用GSON去解析我们的JSON数据,步骤就非常方便了,首先将GSON做成一个工具类,参考代码如下:
有了该工具类在解析今天的数据并生成对应的bean实例,参考代码如下:
那么,JSON的解析就讲完了,在讲讲如何去生成对应的JSON数据。生成JSON数据去XML文件一样,也可以自己一个一个去拼接,当然,正常人都不会这么做。刚刚的GSON工具类的第二个方法,就是用来生成对应JSON数据的,非常的简单。首先生成对应的bean实例,然后传给GSON就可以了,参考代码如下:
日志打印出来的内容和上面贴出来的json数据例子是一致的,可能顺序会有点不同而已。
至此Android开发中常用的两种数据JSON和XML的解析和生成都已经讲解完毕,希望会帮到看到此文章的同学们。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快)(转至百度百科)。
在Android开发中JSON数据的解析和生成非常的常见。先上今天的JSON例子吧
{ "id": "1", "orderTable": "5", "orderCount": "1", "totalCost": "245", "totalCount":"5", "time": "2014-05-19日01:01:01", "complete":"false", "orderMenuItems": [ { "id": "1", "menuId": "1", "menuName": "川菜酸菜鱼", "money": "49.0", "menuCount": "1", "style": "", "complete": "false" }, { "id": "2", "menuId": "2", "menuName": "川菜红烧鱼", "money": "49.0", "menuCount": "4", "style": "", "complete": "false" } ] }
和之前的XML一样,以上面的json数据为基础,开始进行解析和生成。
1、用org.json.JSONObject包的解析器进行解析。参考以下代码
<span style="font-family: Arial, Helvetica, sans-serif;">JSONObject obj = new JSONObject(json);(这个json字符串就是需要解析的数据)</span>
JSONArray array = obj.getJSONArray("orderMenuItems"); int id = obj.getInt("id"); int orderTable = obj.getInt("orderTable"); int orderCount = obj.getInt("orderCount"); double totalCost = obj.getDouble("totalCost"); String time = obj.getString("time"); boolean complete = obj.getBoolean("complete"); for (int i = 0; i < array.length(); i++) { JSONObject objs = array.getJSONObject(i); int _id = objs.getInt("id"); // "id": "1", int menuId = objs.getInt("menuId"); // "menuId": "1", String menuName = objs.getString("menuName"); // "menuName": "川菜酸菜鱼", double money = objs.getDouble("money"); // "money": "49.0", int menuCount = objs.getInt("menuCount"); // "menuCount": "1", String style = objs.getString("style"); // "style": "", boolean completes = objs.getBoolean("complete"); // "complete": "false" }
2、以上代码可以万全的解析出来需要的JSON数据。但是,当JSON数据量大的时候,我们不可能这样去一行一行的写代码去解析。那么,我们需要用到第三方的JSON解析JAR包。这里博主介绍谷歌提供的GSONjar包。
用GSON解析的时候,我们需要和之前XML文件一样,将需要的解析的数据定义成为一个类。在定义类的时候,我们需要注意,当整个JSON数据里面包含数组的时候,我们需要将这个数组里面的数据从新定义成一个类。请参考一下代码,这是根据今天的JSONS数据定义出来的两个类。第一个为Order,第二个为JSON数组里面包含数据的类OrderItem.
Order类
import java.util.List; /** * @ClassName: Order * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2014年11月30日 下午6:20:10 * @Description: TODO * */ public class Order { private int id; private int orderCount; private int orderTable; private double totalCost; private int totalCount; private String time; private boolean complete; private List<OrderItem> orderMenuItems; public Order() { }; public Order(int id, int orderCount, int orderTable, double totalCost, int totalCount, String time, boolean complete, List<OrderItem> orderMenuItems) { this.id = id; this.orderCount = orderCount; this.orderTable = orderTable; this.totalCost = totalCost; this.totalCount = totalCount; this.time = time; this.complete = complete; this.orderMenuItems = orderMenuItems; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getOrderTable() { return orderTable; } public void setOrderTable(int orderTable) { this.orderTable = orderTable; } public double getTotalCost() { return totalCost; } public void setTotalCost(double totalCost) { this.totalCost = totalCost; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public boolean isComplete() { return complete; } public void setComplete(boolean complete) { this.complete = complete; } public List<OrderItem> getOrderMenuItems() { return orderMenuItems; } public void setOrderMenuItems(List<OrderItem> orderMenuItems) { this.orderMenuItems = orderMenuItems; } public String toString() { return "id:" + id + "-" + "orderCount:" + orderCount + "-" + "orderTable:" + orderTable + "-" + "totalCost" + totalCost + "-" + "totalCount:" + totalCount + "-" + "time:" + time + "-" + "complete:" + complete; } }
OrderItem类
/** * @ClassName: OrderItem * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2014年11月30日 下午6:24:52 * @Description: TODO * */ public class OrderItem { private int id; private int menuId; private String menuName; private double money; private int menuCount; private String style; private boolean complete; public OrderItem() { }; public OrderItem(int id, int menuId, String menuName, double money, int menuCount, String style, boolean complete) { this.id = id; this.menuId = menuId; this.menuName = menuName; this.money = money; this.menuCount = menuCount; this.style = style; this.complete = complete; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getMenuId() { return menuId; } public void setMenuId(int menuId) { this.menuId = menuId; } public String getMenuName() { return menuName; } public void setMenuName(String menuName) { this.menuName = menuName; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public int getMenuCount() { return menuCount; } public void setMenuCount(int menuCount) { this.menuCount = menuCount; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } public boolean isComplete() { return complete; } public void setComplete(boolean complete) { this.complete = complete; } }
那么有了这两个类之后,在用GSON去解析我们的JSON数据,步骤就非常方便了,首先将GSON做成一个工具类,参考代码如下:
import com.google.gson.Gson; public class GsonUtils { //将JSON数据解析生成指定的类 public static <T> T jsonToBean(String jsonResult, Class<T> clz) { Gson gson = new Gson(); T t = gson.fromJson(jsonResult, clz); return t; } //将一个javaBean生成对应的Json数据 public static String beanToJson(Object obj) { Gson gson = new Gson(); String json = gson.toJson(obj); return json; } }
有了该工具类在解析今天的数据并生成对应的bean实例,参考代码如下:
Order orderjson = GsonUtils.jsonToBean(json, Order.class); Log.i("json", orderjson.toString());就这么一行代码就OK了。日志里面打印出来的是对应的内容。这里需要特别注意的是运用GSON解析JSON数据,定义的类的字段名必须和Json数据中的key值一样。
那么,JSON的解析就讲完了,在讲讲如何去生成对应的JSON数据。生成JSON数据去XML文件一样,也可以自己一个一个去拼接,当然,正常人都不会这么做。刚刚的GSON工具类的第二个方法,就是用来生成对应JSON数据的,非常的简单。首先生成对应的bean实例,然后传给GSON就可以了,参考代码如下:
OrderItem item1 = new OrderItem(1, 1, "川菜酸菜鱼", 49.0, 1, "加辣", false); OrderItem item2 = new OrderItem(2, 2, "川菜红烧鱼", 58.0, 4, "加辣", false); List<OrderItem> orderMenuItems = new ArrayList<OrderItem>(); orderMenuItems.add(item1); orderMenuItems.add(item2); Order order = new Order(1, 1, 5, 245, 1, "2014-05-19日01:01:01", false, orderMenuItems); String json = GsonUtils.beanToJson(order); Log.i("json", json);
日志打印出来的内容和上面贴出来的json数据例子是一致的,可能顺序会有点不同而已。
至此Android开发中常用的两种数据JSON和XML的解析和生成都已经讲解完毕,希望会帮到看到此文章的同学们。
相关文章推荐
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- Android开发中使用fastJSON将json格式的数据快速解析生成实体类并附上实体类生成器
- 【Android网络开发の4】解析和生成JSON数据
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- 【Android网络开发の4】解析和生成JSON数据
- 【Android网络开发の4】解析和生成JSON数据
- Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
- android开发之JSON数据解析
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Android开发视频第二季之十二:JSON数据解析
- Android开发之Gson解析Json嵌套数据
- Android开发--Json数据的解析
- 开发android客户端需要了解的知识--JSON数据解析
- Android开发中json数据解析工具类
- Android开发之JSON数据解析详解(一)
- Android开发之JSON数据解析详解(二)
- 【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据
- 老罗Android开发视频教程( android解析json数据 )4集集合
- Android开发之解析JSon数据
- Android开发之解析JSon数据(二)