`
jilong-liang
  • 浏览: 482637 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Gson的JsonWriter和JsonReader代码详解例子

    博客分类:
  • Json
阅读更多
package com.app.json;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.app.entity.duapp.Address;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
/**
 * @date:2013-07-21
 * @author ljl
 *
 */
@SuppressWarnings("all")
public class JsonWriterReader {
	private static Gson gson = new Gson();
	public static void main(String[] args) throws Exception {
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		Map map1 = new HashMap();
		map1.put("country", "中国");
		map1.put("province", "广东省");
		map1.put("city", "广州市");
		map1.put("district", "天河区");
		map1.put("street", "棠东");
		
		Map map2 = new HashMap();
		map2.put("country", "中国");
		map2.put("province", "广东省");
		map2.put("city", "广州市");
		map2.put("district", "越秀区");
		map2.put("street", "五羊新邨");
		
		list.add(map1);
		list.add(map2);
		
		String[] str = new String[2];
		str[0]="中国";
		str[1]="美国";
		 
		Address add = new Address(1, "中国");
		
		List<Map> mapList = printlnJsonInfo(list, map1, str, add);
		
		/**写*/
		File file = writerJsonToFile(gson, mapList);
		/***读*/
		readJsonFromFile(gson, file);
	}

	/**
	 * 打印Json信息
	 * @param list
	 * @param map1
	 * @param str
	 * @param add
	 * @return
	 */
	private static List<Map> printlnJsonInfo(List<Map<String, String>> list, Map map1,String[] str, Address add) {
		String listsJson = gson.toJson(list);// 集合转json
		String mapJson = gson.toJson(map1);// map转json
		String arrayJson = gson.toJson(str);// 数组转json
		String ObjJson = gson.toJson(add);// 对象转json

		System.out.println("->********************Object to JSON********************->");
		System.out.println("list -> 转Json: " + listsJson);
		System.out.println("Map对象 -> 转Json: " + mapJson);
		System.out.println("String数组 -> 转Json: " + arrayJson);
		System.out.println("Object -> 转Json: " + ObjJson);
		System.out.println("->********************JSON to Object  ********************->");
		
		List<Address> listUser = new ArrayList<Address>();
		//从str遍历添加了多个对象
		for (int i = 0; i<str.length; i++) {
			listUser.add(new Address(i,str[i]));
		}
		String listJson = gson.toJson(listUser);
		System.out.println("Json-> 转泛型集合: " + listJson);
		List<Address> listAdd = gson.fromJson(listJson,new TypeToken<List<Address>>() {}.getType());
				
		for (Address addr : listAdd) {
			System.out.println("国家:" + addr.getCountry());
		}
		System.out.println("Json -> 转泛型集合List<Map<String,String>>: " + listsJson);
		List<Map> mapList = gson.fromJson(listsJson,new TypeToken<List<Map<String, String>>>() {}.getType());
				
		for (Map map : mapList) {
			System.out.println("地区:" + map.get("street"));
		}
		System.out.println("Json -> 转Oject: " + listsJson);
		Address ad = gson.fromJson(ObjJson, Address.class);
		System.out.println("国家:"+ad.getCountry());
		return mapList;
	}

	/**
	 * JsonWriter
	 * 把Json数据写入文件里面
	 * @param gson
	 * @param mapList
	 * @return
	 * @throws Exception
	 */
	private static File writerJsonToFile(Gson gson, List<Map> mapList)throws Exception {
		File file = new File("gson");// 把json保存项目根目录下无后缀格式的文本
		OutputStream out = new FileOutputStream(file);
		JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));//设计编码
		gson.toJson(mapList, new TypeToken<List<Map<String, String>>>() {}.getType(), writer);
		writer.flush();
		writer.close();
		return file;
	}

	/**
	 * JsonReader
	 * 读取从本地文件的Json数据
	 * @param gson
	 * @param file
	 * @throws Exception
	 */
	private static void readJsonFromFile(Gson gson, File file)throws Exception {
		InputStream input = new FileInputStream(file);
		JsonReader reader = new JsonReader(new InputStreamReader(input));
		List<Map> content = gson.fromJson(reader,new TypeToken<List<Map<String, String>>>() {}.getType());
		//List<Map> content = gson.fromJson(new InputStreamReader(input),new TypeToken<List<Map<String, String>>>() {}.getType());
		for (Map map : content) {
			System.out.println("地区:" + map.get("street"));
		}
		reader.close();
	}

}

 

[
	{"street":"棠东","province":"广东省","district":"天河区","city":"广州市","country":"中国"},
	{"street":"五羊新邨","province":"广东省","district":"越秀区","city":"广州市","country":"中国"}
]

 

package com.app.entity.duapp;

import java.io.Serializable;

import com.google.gson.annotations.Expose;
/**
 * Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
 * 创建Gson对象,没有@Expose注释的属性将不会被序列化
 * serialize序列化 默认 true
 * deserialize反序列化 默认 true
 */
public class Address implements Serializable{
	@Expose(serialize=false)// 序列化  /Address类已经序列化
	private int id;
	@Expose(deserialize=false)// 反序列化
	private String country;//国家
	private String province;//省份
	private String city;//城市
	private String street;//街道
	private String district;//地区
	private String cityCode;//邮政编码
	private String streetNumber;//街道号
	
	public Address() {
	}
	
	public Address(int id,String country) {
		this.id=id;
		this.country=country;
	}
	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;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}
	
}

 

0
0
分享到:
评论

相关推荐

    gson-2.4源代码

    开源的gson2.4代码,有需要的可以下载研究。gson-2.4-sources的jar包。请注意,不能直接导入使用!这是源代码包!

    google gson 异步post访问服务器的例子。

    Gson库允许我们将Java对象序列化成JSON字符串,以便在网络请求中发送,同时也能将接收到的JSON字符串反序列化为Java对象,便于处理和存储。这大大简化了数据交换的过程。 在标题和描述中提到的“异步POST访问服务器...

    Gson的三个jar包

    5. **流式API(JsonWriter和JsonReader)**:除了基本的转换方法,Gson还提供了JsonWriter和JsonReader接口,它们允许更细粒度的控制JSON的写入和读取,适用于处理大量JSON数据。 6. **复杂类型支持**:Gson能够...

    android之json和gson数据解析最完整的代码例子(包括各种样式的json数据)

    JSON(JavaScript Object Notation)和Gson是Android开发中常用的数据序列化和反序列化工具,...以上就是关于“Android之json和gson数据解析最完整的代码例子”的详细介绍,希望对您在学习和使用JSON及Gson时有所帮助。

    我的gson学习例子

    在Java开发中,Gson库是一个非常重要的工具,它由Google提供,用于将Java对象转换为JSON字符串,以及将JSON数据解析回等效的Java...在实际项目中,根据需求灵活运用Gson的各种特性,可以极大地提高开发效率和代码质量。

    Gson解析的一个例子

    Gson是Google开发的一款Java库,用于在Java对象和JSON数据之间进行映射。这个库使得Java对象可以轻松地序列化为JSON格式,同时也可以从JSON字符串反序列化回Java对象。在本例中,我们将深入探讨如何使用Gson库进行...

    gson-2.6.2.zip

    5. 格式化输出:Gson提供了`JsonWriter`和`JsonParser`,可以用来控制JSON的输出格式,如是否缩进、如何处理日期等。 6. 安全性:Gson在处理用户输入时,如果直接反序列化不受信任的JSON,可能存在安全风险。为了...

    gson-2.1源码

    包下的源码,这些文件包含了处理JSON流的类,如JsonReader和JsonWriter,它们提供了基于字符流的JSON解析和生成功能,适合处理大量JSON数据。 此外,`com.google.gson.internal`包下的类主要实现了Gson库的基础功能...

    谷歌 Gson2.8.0 依赖包、文档和源码

    通过查看源代码,开发者可以深入理解Gson的工作原理,学习其内部实现,甚至调试和优化代码。源码分析有助于提升个人技能,特别是对于解决使用过程中遇到的问题,或者想要扩展Gson功能时,源码能提供直接的参考。 ...

    Gson1.5/1.6/2.2三个版本

    - 添加了`JsonWriter`和`JsonReader`,用于流式处理JSON,提高了性能和内存效率。 - 包含了`JsonElement`,这是一个抽象类,表示JSON结构的基本元素,如`JsonObject`、`JsonArray`、`JsonPrimitive`和`JsonNull`。...

    googleGson JsonObject json转换包

    包含以下java源文件: ...com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class ...

    gson gson gson

    7. **流式API(JsonWriter和JsonReader)**: 对于大量或复杂的JSON数据处理,可以使用流式API进行逐个元素的读写,提高效率并节省内存。 8. **字段保留策略**: 使用`@Keep`注解可以在混淆时保留字段,确保反序列化...

    gson2.8.0和2.8.6.rar

    在Java开发中,Gson库被广泛应用于数据序列化和反序列化,特别是在网络通信和存储数据时。本篇文章将深入探讨Gson 2.8.0和2.8.6这两个版本的区别,以及如何在不同Java环境下使用它们。 首先,我们来看看标题中的...

    Gson-2.2.4.jar包和源代码

    而gson-2.2.4-sources.jar则提供了Gson库的源代码,对于开发者来说,这是一个宝贵的资源,可以深入理解库的内部实现,便于调试和学习。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读...

    gson2.8.6.zip

    - **流式API**:`JsonWriter`和`JsonReader`提供了处理JSON流的API,适用于大量数据的处理。 - **GsonBuilder**:GsonBuilder是一个配置对象,可以用来构建具有特定配置的Gson实例,比如设置日期格式、启用或禁用...

    gson-2.3.1的jar包含源码和说明文档

    4. **流式API**:Gson的源码还揭示了其流式API的实现,如`JsonReader`和`JsonWriter`,这些接口可以用于逐行读取或写入JSON,适合处理大型数据集。 说明文档部分: 1. **官方文档**:Gson的说明文档提供了详细的...

    Gson处理Json格式字符串代码

    在Java开发中,Gson库是Google提供的一款用于在Java对象和JSON数据之间进行映射的Java库。它使得我们能够方便地将Java对象转换为JSON格式的字符串,同时也能将JSON格式的数据转换回对应的Java对象。这个过程被称为...

    GsonDemo小例子

    这个“GsonDemo小例子”显然涉及到如何使用Gson库进行JSON操作的基本概念和实践。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成...

    android gson 混淆代码 问题

    然而,在混淆代码时,可能会遇到一些问题,导致Gson无法正常工作。本文将深入探讨这些问题及其解决方案。 首先,我们要明白混淆的主要目的是为了减小应用的大小并增加反编译的难度。它会重命名类、方法和变量,这...

    gson-gson-parent-2.10.1.tar.gz

    5. **流式API**:Gson提供了`JsonReader`和`JsonWriter`,可以用来读写JSON数据流,适用于处理大量JSON数据的情况。 6. **运行时注解处理**:Gson支持在运行时解析注解,比如`@Expose`可以控制哪些字段被序列化或反...

Global site tag (gtag.js) - Google Analytics