Json之java-Gson

Posted Veryvalley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json之java-Gson相关的知识,希望对你有一定的参考价值。

Gson-Google出品的Json处理工具,网上好评大片,先来学习一下。

先列出网上找到的一个评价:

Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

 

实践的一些代码

import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;

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

public class GsonUse {
/**
* Gson常用场景
*/
@Test
public void useGsonCommon() {
Gson gson = new Gson(); // 解析json最基础的工具类
GsonBuilder gsonBuilder = new GsonBuilder(); // Gson对象构建类,可以gson对象做一些全局设置。再创建gson对象
gson = gsonBuilder.create(); // 能过GsonBuilder ,生成gson对象

JsonParser jsonParser = new JsonParser(); // Json解析器
JsonElement jsonElement = jsonParser.parse("{}"); // 用Json解析器解析json字符串为Json元素,
// JsonElement 可以是JsonObject或者JsonArray,根据实际发问转化
JsonObject jsonObject = new JsonObject();
jsonObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = new JsonArray();
jsonArray = jsonArray.getAsJsonArray();

User user = new User();
user.setAge(12);
user.setName("[123]");
// bean -> json
String userJson = gson.toJson(user);
System.out.println(userJson);
// json -> bean
User u = gson.fromJson(userJson, User.class);

//构造集合
List<User> users = new ArrayList<User>();
User u_i = null;
for (int i = 0; i < 10; i++) {
u_i = new User();
u_i.setAge(i);
u_i.setName("name" + i);
users.add(u_i);
}
String usersJson = gson.toJson(users);
System.out.println(userJson);
// **********************注意:TypeToken的用法 **********************
List<User> userList = gson.fromJson(usersJson, new TypeToken<List<User>>() {
}.getType());
// Set<User> userSet = gson.fromJson(usersJson,new TypeToken<Set<User>>(){}.getType());
// Map<String,User> userMap = gson.fromJson(userJson,new TypeToken<Map<String,User>>(){}.getType());
System.out.println(userList);
}
/** * 格式化json */ @Test public void formateJson() { String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; // 创建能够格式化的转出json字符串的Gson对象 Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonStr); String formatedJson = gson.toJson(jsonElement); // 将json字符串格式化输出 System.out.println(formatedJson); } /** * Json属性操作:删除,添加,判断是否存在属性,修改 */ @Test public void jsonAttrOpt() { String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonStr); JsonArray jsonArray = jsonElement.getAsJsonArray(); JsonObject jObj = jsonArray.get(0).getAsJsonObject(); // 判断是否存在属性id boolean hasId = jObj.has("id"); System.out.println(hasId); // 添加属性 jObj.addProperty("age", 12); System.out.println(jObj); // 删除属性 jObj.remove("age"); System.out.println(jObj); //修改属性,先删除,再添加 jObj.remove("name"); jObj.addProperty("name", new Gson().toJson("[8888]")); System.out.println(jObj); } /** * 通过GsonBuilder对Gson对象做一些配置,如日期格式化等等 */ @Test public void gsonBuilderUse() { GsonBuilder gsonBuilder = new GsonBuilder(); // 设置时间格式 gsonBuilder.setDateFormat("yyyy-MM-dd hh:mm:ss"); // 取消对html的转义 //gsonBuilder.disableHtmlEscaping(); Gson gson = gsonBuilder.create(); System.out.println(gson.toJson(new Date())); System.out.println(gson.toJson("<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>")); //转义输出:"\u003c!DOCTYPE html\u003e \u003chtml\u003e \u003chead\u003e \u003ctitle\u003e\u003c/title\u003e \u003c/head\u003e \u003cbody\u003e \u003c/body\u003e \u003c/html\u003e" // 不转义输出: "<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>" } }

  













































以上是关于Json之java-Gson的主要内容,如果未能解决你的问题,请参考以下文章

实用代码片段将json数据绑定到html元素 (转)

vscode之快速生成vue模板

json 可视代码工作室Angular with Firebase片段

vs code 用户代码片段 html.json

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

如何在android中将json数据加载到片段中