gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
和json-lib相比,Gson操作就相当的更简单了不管是对象还是数组,还是上面较复杂的map集合,操作都是一样的,不依赖其他jar,使用起来很方便简单。
package gson;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
/**
* Gson常用操作
*
* @author xuyw
*
*/
public class Test {
public static void main(String[] args) throws Exception {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map m = new HashMap();
m.put("longitude", "123.999");
m.put("latitude", "28.999");
Map m2 = new HashMap();
m2.put("longitude", "124.333");
m2.put("latitude", "24.9");
list.add(m);
list.add(m2);
String[] str = new String[2];
str[0] = "123.999";
str[1] = "28.999";
User user = new User(1, "张三");
Gson gson = new Gson();
String listjson = gson.toJson(list);//集合转json
String mapjson = gson.toJson(m);//map转json
String arrayjson = gson.toJson(str);//数组转json
String javabeanjson = gson.toJson(user);//对象转json
System.out
.println("->********************Object to JSON********************->");
System.out.println("list -> 转json: " + listjson);
System.out.println("Map -> 转json: " + mapjson);
System.out.println("Array -> 转json: " + arrayjson);
System.out.println("JavaBean -> 转json: " + javabeanjson);
System.out
.println("->********************JSON to Object ********************->");
List<User> tusers = new ArrayList<User>();
for (int i = 0; i < 5; i++) {
tusers.add(new User(i, "user" + i));
}
String list_userjson = gson.toJson(tusers);
System.out.println("json -> 转泛型集合: " + list_userjson);
List<User> list_user = gson.fromJson(list_userjson,
new TypeToken<List<User>>() {
}.getType());
for (User u : list_user) {
System.out.println("姓名:" + u.getName());
}
System.out
.println("json -> 转泛型集合List<Map<String,String>>: " + listjson);
List<Map> listmapList = gson.fromJson(listjson,
new TypeToken<List<Map<String, String>>>() {
}.getType());
for (Map map : listmapList) {
System.out.println("longitude:" + map.get("longitude"));
}
System.out.println("json -> 转javabean: " + listjson);
User user2 = gson.fromJson(javabeanjson, User.class);
System.out.println(user2.getName());
// GsonBuilder gsonBuilder = new GsonBuilder();
// // 通过GsonBuilder 的create生成Gson对象
// Gson gson2 = gsonBuilder.create();
//
// // 通过TypeToken活动Type对象
// String gsonstr = gson2.toJson(tusers, new TypeToken<List<User>>() {
// }.getType());
// System.out.println(gsonstr);
File file = new File("gson.txt");// 把json保存文本
OutputStream out = new FileOutputStream(file);
JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
gson.toJson(listmapList, new TypeToken<List<Map<String, String>>>() {
}.getType(), writer);
writer.flush();
InputStream input = new FileInputStream(file);
// JsonReader reader = new JsonReader(new InputStreamReader(input));
// List<Map> readertxt = gson.fromJson(reader,
// new TypeToken<List<Map<String, String>>>() {
// }.getType());
List<Map> readertxt = gson.fromJson(new InputStreamReader(input),
new TypeToken<List<Map<String, String>>>() {
}.getType());
System.out.println("读取本地json文件");
for (Map map : readertxt) {
System.out.println("longitude:" + map.get("longitude"));
}
}
}