package com.app.json; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.sf.json.JSONArray; import com.app.entity.duapp.Address; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; /** *@DEMO:napp *@Author:jilongliang *@Date:2013-7-20 */ public class JsonParse { private static Gson gson=new Gson(); /** * 通过JsonLib把数组转换成Json数据 * @param url * @throws Exception */ private static JSONArray getArrayToJsonByJsonLib()throws Exception { JSONArray jsonArr=null; List<Address> lists=new ArrayList<Address>(); for (int i = 1; i <=12; i++) { Address addr = new Address(); addr.setProvince("第"+i+"个省份"); addr.setCity("第"+i+"个城市"); addr.setCityCode("130"+i); addr.setStreet("街道"+i); addr.setStreetNumber("街道号码"+i); lists.add(addr); } jsonArr = JSONArray.fromObject(lists); //把对象转换成Json对象 return jsonArr; } public static void main(String[] args)throws Exception{ getJsonGson(); } /** * 利用Json-lib封装数组Json数据,Gson解析Json数据. * @throws Exception */ private static void getJsonGson() throws Exception { //Json-lib的JSONArray数组对象 JSONArray JsonArray =getArrayToJsonByJsonLib(); String jsonData=JsonArray.toString(); /* * 自己组装成一个json格式,格式必须为{,,}才能为JsonElement对象的parse方法解析不是否则 * 会报错com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 1307 */ String json="{status:1,address:"+jsonData+"}"; // 创建一个JsonParser JsonParser parser = new JsonParser(); JsonElement jsonEl = parser.parse(json); JsonObject jsonObj = null; jsonObj = jsonEl.getAsJsonObject();//转换成Json对象 String status=jsonObj.get("status").getAsString();//status节点 //System.out.println(status); JsonElement addressEl=jsonObj.get("address");//address节点 if(addressEl.isJsonArray()){//判断是否为Json数组 JsonArray jsonArray= addressEl.getAsJsonArray();//转为数组 for(Iterator iter=jsonArray.iterator();iter.hasNext();){ JsonObject obj=(JsonObject) iter.next(); //String city=obj.get("city").getAsString();//方法一:根据key形势取值 Address add=gson.fromJson(obj, Address.class);//方法二:灵活使用Gson取数据 System.out.println(add.getProvince()+"\t"+add.getCity()); } } } }
json数据是由运行JsonRead类可以生成
{ "info": { "users":{"username":"liangjilong","email":"jilongliang@sina.com","tel":"12396878","age":"25"}, "address":{"street":"棠东","province":"广东省","district":"天河区","city":"广州市"} } }
JsonRead
package com.app.json; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import com.google.gson.Gson; import com.google.gson.stream.JsonReader; /** *@DEMO:napp *@Author:jilongliang *@Date:2013-7-20 */ public class JsonRead { private static Gson gson=new Gson(); /** * @param args */ public static void main(String[] args) throws Exception{ getJsonData(); //方法二 //String pathname="src/config/doc/json"; //InputStream input = new FileInputStream(new File(pathname)); //readJsonData(input,null); } /** * 组装Json数据 * @throws Exception */ private static void getJsonData() throws Exception { /** * 组装address对象的数据 */ Map<String, String> address = new HashMap <String, String>(); address.put("province", "广东省"); address.put("city", "广州市"); address.put("district", "天河区"); address.put("street", "棠东"); /** * 组装users对象的数据 */ Map<String, String> users = new HashMap <String, String>(); users.put("username", "liangjilong"); users.put("age", "25"); users.put("tel", "12396878"); users.put("email", "jilongliang@sina.com"); Map<Object, Object> listsObj = new HashMap <Object, Object>(); listsObj.put("address",address);//address节点 listsObj.put("users",users);//users节点 Object obj=listsObj;//转换成对象 Map<Object, Object> info = new HashMap <Object, Object>(); info.put("info", obj);//json的根节点 String json=gson.toJson(info);//转换成json数据 System.out.println(json);//打印json数据 readJsonData(null,json); } /** * 从文件读取json数据 * @param in * @throws Exception */ public static void readJsonData(InputStream in,String json) throws Exception { //JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); JsonReader reader = new JsonReader(new StringReader(json)); try { reader.beginObject(); String tagName = reader.nextName(); if (tagName.equals("info")) { readInfo(reader); } reader.endObject(); } finally { reader.close(); } } /** * 读取json的父(根,第一个)节点 * @param reader * @throws Exception */ public static void readInfo(JsonReader reader) throws Exception { reader.beginObject(); while (reader.hasNext()) { String tagName = reader.nextName(); if (tagName.equals("address")) { readAddress(reader); } else if (tagName.equals("users")) { readUsers(reader); } } reader.endObject(); } /** * 读取用户信息值 * @param reader * @throws IOException */ public static void readUsers(JsonReader reader) throws IOException { reader.beginObject(); while (reader.hasNext()) { String tag = reader.nextName(); if (tag.equals("username")) { String username = reader.nextString(); System.out.println("用户名:" + username); } else if (tag.equals("email")) { String email = reader.nextString(); System.out.println("Email:" + email); } else if (tag.equals("tel")) { String tel = reader.nextString(); System.out.println("电话:" + tel); }else if (tag.equals("age")) { String age = reader.nextString(); System.out.println("年龄:" + age); } else { reader.skipValue();//忽略值/跳过break } } reader.endObject(); } /** * 读取地区值 * @param reader * @throws IOException */ public static void readAddress(JsonReader reader) throws IOException { reader.beginObject(); while (reader.hasNext()) { String tag = reader.nextName(); if (tag.equals("province")) { String province = reader.nextString(); System.out.println("省份:" + province); } else if (tag.equals("city")) { String city = reader.nextString(); System.out.println("街道:" + city); } else if (tag.equals("street")) { String street = reader.nextString(); System.out.println("街道:" + street); }else if (tag.equals("district")) { String district = reader.nextString(); System.out.println("区:" + district); } else { reader.skipValue();//忽略值/跳过break } } reader.endObject(); } }
实体类:
package com.app.entity.duapp; import java.io.Serializable; import com.google.gson.annotations.Expose; /** * 使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); * 创建Gson对象,没有@Expose注释的属性将不会被序列化 * serialize序列化 默认 true * deserialize反序列化 默认 true * */ public class Address implements Serializable{ @Expose(serialize=false)// 序列化 /类已经序列化 private String streetNumber; @Expose(deserialize=false)// 反序列化 private String street; private String district; private String city; private String province; private String cityCode; public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getStreetNumber() { return streetNumber; } public void setStreetNumber(String streetNumber) { this.streetNumber = streetNumber; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } }
相关推荐
Gson的优点在于它的灵活性和易用性,使得处理JSON数据变得简单高效。 ### 添加Gson依赖 在Android项目中使用Gson,首先需要在`build.gradle`文件的dependencies部分添加Gson库依赖: ```groovy dependencies { ...
在本文中,我们将深入探讨如何使用Gson解析JSON数据,包括处理简单JSON和复杂的JSON结构。 首先,我们要了解JSON的基本概念。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,...
1、生成Json数据 2、使用Gson解析Json数据(单个json对象、json数组和json对象内嵌json数组) // 这里有两篇好心人的博文,有详细的讲解 http://www.jb51.net/article/32547.htm ...
JSON(JavaScript Object Notation)和Gson是Android开发中常用的数据序列化和反序列化工具,...以上就是关于“Android之json和gson数据解析最完整的代码例子”的详细介绍,希望对您在学习和使用JSON及Gson时有所帮助。
本文将深入探讨如何使用两个流行的Java库——Gson和Json-lib来解析和组装JSON数据。 **一、Gson库** Gson是由Google开发的一个Java库,它能将Java对象转换为JSON字符串,也能将JSON数据转换回等效的Java对象。使用...
2. 使用Gson实例解析JSON:有了JSON字符串和对应的数据模型类,我们可以使用Gson的fromJson()方法将JSON转换为Java对象。 ```java String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\"}...
本教程将重点介绍如何使用Gson库在Java环境中解析JSON数据。 Gson是Google提供的一款开源库,它能够将Java对象转换为对应的JSON字符串,也可以将JSON数据反序列化为Java对象。这对于处理JSON数据非常方便。在本示例...
本文将详细介绍如何在Android中使用Gson来创建和解析JSON数据。 首先,你需要在项目中引入Gson库。如果你的项目使用的是Gradle构建系统,可以在`build.gradle`文件的dependencies块中添加以下依赖: ```groovy ...
Android使用Kotlin利用Gson解析多层嵌套Json数据
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,通常用于在Web服务和客户端应用程序之间传递数据。Gson是Google开发的...
【Gson解析JSON数据】 Gson是Google提供的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它可以将任何Java对象转换为它的JSON表示形式,反之亦然。在处理JSON数据时,我们经常遇到两种常见的数据结构:...
总结,Gson是Java开发中处理JSON数据的强大工具,它提供了简洁的API,使得JSON解析和反解析变得轻松高效。无论是在本地文件操作还是网络数据交互中,Gson都能发挥重要作用。理解并熟练掌握Gson的使用,对于提升Java...
例如,在Android应用程序中,可以使用Gson或FastJson将JSON数据解析成Java对象,或者将Java对象转换成JSON字符串。 使用Gson解析JSON的步骤: 1. 首先,需要将JSON字符串解析成Java对象,使用Gson的fromJson方法...
在Java开发中,处理JSON数据是一项常见的任务,Gson库是...通过学习和熟练使用Gson,可以极大地提高开发效率,简化JSON数据的解析和操作。对于JSON文件的解析,Gson库无疑是一个强大的工具,值得在实际项目中广泛应用。
下面我们将讨论如何使用 Gson 解析复杂的 JSON 数据。 从给定的 JSON 数据可以看到,这是一个复杂的 JSON 对象,它包含多个层次的嵌套结构。为了解析这个 JSON 对象,我们需要使用 Gson 库提供的功能。 首先,我们...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,同时也易于人阅读和编写,同时也易于机器解析和生成。JSON格式基于ECMAScript的一个子集,广泛用于Web服务与...
**Android JSON解析框架GSON详解** 在Android应用开发中,数据交换经常采用JSON格式,因为它轻量级、易于阅读和编写,并且被广泛支持。为了高效地解析和生成JSON,Google提供了一个强大的库——GSON。GSON允许将...
### 复杂JSON数据解析与Gson应用详解 在当今数据驱动的世界中,JSON(JavaScript Object Notation)作为数据交换的标准格式之一,在Web服务、API交互等场景中扮演着极其重要的角色。对于开发者而言,能够高效地解析...
标题"“GSON相关头文件与json的解析库”"暗示我们将探讨GSON库在处理JSON数据时所涉及的头文件和解析功能。在Java开发环境中,使用GSON通常需要导入以下关键的头文件: ```java import com.google.gson.Gson; ...