<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