| 知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
https://github.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>
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"));
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 + "]";
}
}
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);
}
}
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);
}
}
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());
}
}
}
通過 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);
}
}
https://github.com/google/guava/wiki
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.0</version> </dependency>
27 版本需要指定 27.1-jre,如果是安卓系統 27.1-android
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>27.1-jre</version> </dependency>
package cn.netkiller.test;
import com.google.common.base.CharMatcher;
public class Test {
public static void main(String[] args) {
String string = "佛山市南海區123華泰ABC精密abc機械有限公司消防維保,";
// 版本 23.0
// String printable = CharMatcher.INVISIBLE.removeFrom(string);
// String clean = CharMatcher.ASCII.retainFrom(printable);
String printable = CharMatcher.invisible().removeFrom(string);
String clean = CharMatcher.ascii().retainFrom(printable);
System.out.println(printable);
System.out.println(clean);
}
}