19.2. com.google.gson

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>sender</groupId>
	<artifactId>sender</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Sender</name>
	<description>EDM</description>

	<dependencies>
		<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>3.6.0</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.6.2</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>

</project>		

19.2.1. map 处理

Example

package io.github.netkiller;

import java.util.HashMap;
import java.util.Map;

import com.google.gson.*;

public class GsonTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Gson gson = new Gson();
		String json = "{\"k1\":\"v1\",\"k2\":\"v2\"}";
		Map<String, String> map = new HashMap<String, String>();
		map = (Map<String, String>) gson.fromJson(json, map.getClass());
		System.out.println(map.get("k1"));
	}

}

多层 Map 剥离

		Gson gson = new Gson();
		String inf= "{\"0\":{\"id\":\"2\",\"category_id\":\"1\",\"title\":\"Test2\",\"author\":\"\",\"ctime\":\"2016-03-05 11:59:56\"},\"1\":{\"id\":\"1\",\"category_id\":\"1\",\"title\":\"Test1\",\"author\":\"\u6d4b\u8bd5\",\"ctime\":\"2016-03-05 11:57:30\"},\"pages\":{\"count\":2,\"first\":0,\"last\":0,\"before\":0,\"current\":0,\"next\":0,\"total\":0}}";
		Map<String, Map> map = new HashMap<String, Map>();

		map = (Map<String, Map>) gson.fromJson(inf, map.getClass());
		System.out.println(map.get("1").get("title"));
		System.out.println(map.get("pages").get("count"));

19.2.2. POJO

package cn.netkiller.gson;

import java.util.ArrayList;
import java.util.List;

public class Personal {
	private int age = 30;
	private String name = "neo";
	private List<String> telphone = new ArrayList<String>() {
		{
			add("13113668890");
			add("13322993040");
			add("29812080");
		}
	};

	// getter and setter methods

	@Override
	public String toString() {
		return "Personal [age=" + age + ", name=" + name + ", telphone=" + telphone + "]";
	}
}

19.2.3. toJson

package cn.netkiller.gson;

import com.google.gson.Gson;

public class GsonExampleToJson {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Personal obj = new Personal();
		Gson gson = new Gson();

		// convert java object to JSON format, and returned as JSON formatted string
		String json = gson.toJson(obj);
		System.out.println(json);
	}

}

19.2.4. fromJson

package cn.netkiller.gson;

import com.google.gson.Gson;

public class GsonExampleFromJson {
	public static void main(String[] args) {

		Personal obj = new Personal();
		Gson gson = new Gson();

		// convert the json string back to object
		obj = gson.fromJson("{\"age\":30,\"name\":\"neo\",\"telphone\":[\"13113668890\",\"13322993040\",\"29812080\"]}", Personal.class);

		System.out.println(obj);
	}
}

19.2.5. JsonParser

package cn.netkiller.gson;

import java.util.Map.Entry;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

public class GsonJsonParser {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String jsonString = "{\"age\":30,\"name\":\"neo\",\"telphone\":[\"13113668890\",\"13322993040\",\"29812080\"],\"address\":{\"province\":\"Guangdong\",\"city\":\"Shenzhen\"}}";

		JsonElement root = new JsonParser().parse(jsonString);
		System.out.println(root.toString());
		System.out.println(root.getAsJsonObject().get("age").getAsInt());
		System.out.println(root.getAsJsonObject().get("name").getAsString());

		// Get the content of the first map
		JsonArray jsonArray = root.getAsJsonObject().get("telphone").getAsJsonArray();

		for (JsonElement tel : jsonArray) {
			System.out.println(tel);
		}

		JsonObject object = root.getAsJsonObject().get("address").getAsJsonObject();
		for (Entry<String, JsonElement> entry : object.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
	}

}

19.2.6. Exmaple 范例

19.2.6.1. Map to Json

Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
String jsonString = gson.toJson(map);

19.2.7. Exmaple 范例

19.2.7.1. Map to Json

Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Map<String, String> source = gson.fromJson(output, HashMap.class);

19.2.8. 处理复杂的类型

通过 TypeToken 定义复杂数据库类型。

package cn.netkiller.ipo.process.json;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import cn.netkiller.ipo.process.ProcessInterface;

public class JsonValueLength implements ProcessInterface {
	private final static Logger logger = LoggerFactory.getLogger(JsonValueLength.class);
	private Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
	private int maxLength = 0;

	public JsonValueLength(int maxLength) {
		this.maxLength = maxLength;
	}

	@Override
	public String run(String line) {

		Map<String, String> map = gson.fromJson(line, new TypeToken<Map<String, String>>() {
		}.getType());
		for (String key : map.keySet()) {
			if (map.get(key).length() > this.maxLength) {
				map.put(key, map.get(key).substring(0, this.maxLength));
			}
		}
		logger.debug("{}", map);
		return gson.toJson(map);
	}

}

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

时间: 2024-10-10 09:54:48

19.2. com.google.gson的相关文章

Json转换神器之Google Gson的使用

这几天,因为项目的需要,接触了Google的Gson库,发现这个东西很好用,遂记下简单的笔记,供以后参考.至于Gson是干什么的,有什么优点,请各位同学自行百度.话不多说,切入正题: 1. 下载Gson的jar包,拷贝到项目的lib文件夹中,并将其加入到buildPath中.使用maven的同学,直接在pom中加入以下依赖即可: ? 1 2 3 4 5 <dependency> <groupId>com.google.code.gson</groupId> <ar

Android网络之数据解析----使用Google Gson解析Json数据

[正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                                                                                 Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JS的一个子集. Json采用完全独立于语言的文本格式,这使得Jso

path-ClassNotFoundException: com.google.gson.Gson

问题描述 ClassNotFoundException: com.google.gson.Gson Servlet.service() for servlet [ns] in context with path [/EC] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/google/gson/Gson] with root cause java

Google 2014年全年收入是660亿,同比增长 19%

摘要: Google 刚刚发布了 2014 Q4 季度的财报:Google 2014年 全年收入是660亿,同比增长 19%.而就第四季度来说,他们收入为181亿.除了公布数据之外,Google CFO Patrick Pichette 还简要提到了那些没有 Google 刚刚发布了 2014 Q4 季度的财报:Google 2014年 全年收入是660亿,同比增长 19%.而就第四季度来说,他们收入为181亿.除了公布数据之外,Google CFO Patrick Pichette 还简要提到

使用GSON库将Java中的map键值对应结构对象转换为JSON_java

Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的List. (GSON的GitHub项目页:https://github.com/google/gson) JavaBean 本例中您要重点看如何将Json转回为普通JavaBean对象时TypeToken的定义. 实体类: public class Point { private int x; private int y; public Point(int

Gson对Java嵌套对象和JSON字符串之间的转换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识,请参考以下内容:http://json.org/json-zh.html 在服务器和客户端之间使用JSON数据格式进行通信,经常会涉及到JAVA对象和JSON字符串之间的转换.通常,我们可以使用一些JSON解析工具,例如:Gson,FastJson等.当然,我们也可以手动解析,只是会比较繁琐. 下面

Java Json API:Gson使用简单入门

GSON是Google开发的Java API,用于转换Java对象和Json对象.本文讨论并提供了使用API的简单代码示例.更多关于GSON的API可以访问:http://sites.google.com/site/gson/. 本文是GSON系列文章的第一篇.本文是其他文章的基础,因此不需要任何GSON或JSON经验.第二篇文章提供了关于GSON反序列化(从JSON到Java)的示例,第三篇文章提供了关于GSON序列化(从Java到JSON)的示例. 下面列出的所有代码都可以在https://

【Gson】【2】Gson使用演示

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qingkechina.blog.51cto.com/5552198/1290557 3.[原始类型演示] (1)原始类型转换为JSON对象(序列化) Gson gson = new Gson(); gson.toJson(1); // 转换后的JSON为1 gson.toJson("abcd"); // 转换后的JSON为"abcd" gson.t

Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP

Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的.因此,我们运行了一个基准测试来对常用的几个JSON库进行了测试,看看在解析不同大小的文件时哪个库的速度是最快的.下面我会把结果分享给大家. JSON通常用于传