Json格式及相关类库运用

JSON(JavaScript Object Notation)

  • 【概念】一种轻量级的数据交换格式
  • 【结构】
    • “名称/值”对的集合(A collection of name/value pairs)。在Java中,可理解为HashMap。示例:var json = { "name":"Jack", "age":23, "Marry":true };
    • 值的有序列表(An ordered list of values)。在大部分语言中,被理解为数组(Array 或 List)。示例:var json = [ "Jack" , "Rose" , "Tom" , 89 , true , false ];

Json-lib

  • 【概念】一个Java类库(官网
  • 【功能】
    • 转换Javabeans, maps, collection, java arrays 和 XML 成为 json 格式数据
    • 转换 json 格式数据成为 javabeans 对象
  • 【所需 jar 包】
    • commons-beanutils-1.8.3.jarJackson
    • commons-collections-3.2.1.jar
    • commons-lang-2.6.jar
    • commons-logging-1.1.1.jar
    • ezmorph-1.0.6.jar
    • json-lib-2.4-jdk15.jar

Jackson

  • 【概念】处理JSON格式数据的类库
  • 【特点】
    • 相比json-lib所需的jar包少
    • 简单易用
    • 性能较好
  • 【所需 jar 包】
    • jackson-annotations-2.1.1.jar
    • jackson-core-2.1.1.jar
    • jackson-databind-2.1.1.jar

GSON

  • 【概念】Google研发
  • 【特点】
    • 无依赖
    • 不需要额外 jar 包
  • 【tips】
  • 【使用】
// bean 转换 json
Gson gson = new Gson();
String json = gson.toJson(object);

// json 转换 bean
Gson gson = new Gson();
String json = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book = gson.fromJson(json,Book.class);

// json 转换复杂的 bean
Gson gson = new Gson();
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
// 转换成 List
List list = gson.fromJson(json, new TypeToken<LIST>() {}.getType());
// 转换成Set
Set set = gson.fromJson(json, new TypeToken<SET>() {}.getType());

// 判断字符串是否是 json
boolean jsonFlag;
try {
new JsonParser().parse(string).getAsJsonObject();
jsonFlag = true;
} catch(Exception e) {
jsonFlag = false;
}

// 从 json 中获取属性
String propertyName = "id";
String propertyValue = "";
try {
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
propertyValue = jsonObj.get(propertyName).toString();
} catch (Exception e) {
propertyValue = null;
}

// 从 json 中除去某个属性
String propertyName = 'id';
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
jsonObj.remove(propertyName);
json = jsonObj.toString();

// 向 json 中添加属性
String propertyName = "age";
Object propertyValue = 12;
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
JsonObject jsonObj = element.getAsJsonObject();
jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));
String json = jsonObj.toString();

// 修改 json 中的属性
// 先remove
// 后add

// 判断 json 中是否含有属性
boolean isContains = jsonObj.has(propertyName);

// json 中日期格式处理
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Gson gson = builder.create();

FastJson

  • 【概念】阿里开发
  • 【特点】
    • 无依赖
    • 高性能
  • 【劣势】在复杂类型的Bean转换Json上需要制定引用
  • 【tips】
  • 【使用】
// bean 转换成 json
// 格式化 json
JSON.toJSONString(object, true);
// 非格式化 json
JSON.toJSONString(object, false);

// json 转换成 bean
Book book = JSON.parseObject(json, Book.class);

// json 转换成复杂的 bean
// List
List list = JSON.parseObject(json, new TypeReference<ARRAYLIST>() {});
// Set
Set set = JSON.parseObject(json, new TypeReference<HASHSET>() {});

// 从 json 中获取属性
JSONObject obj = JSON.parseObject(json);
String propertyValue = obj.get(propertyName);

// 除去 json 中某个属性
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
String propertyValue = set.remove(propertyName);
String json = obj.toString();

// 向 json 中添加属性
JSONObject obj = JSON.parseObject(json);
obj.put(propertyName, JSON.toJSONString(propertyValue));
String json = obj.toString();

// 修改 json 中的属性
JSONObject obj = JSON.parseObject(json);
Set set = obj.keySet();
if(set.contains(propertyName)) {
obj.put(propertyName, JSON.toJSONString(propertyValue));
}
String json = obj.toString();

// 判断 json 中是否包含属性
boolean isContain = set.contains(propertyName);

// json 日期格式处理
Object obj = new Date();
String json = JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss.SSS");


根据多篇博客整合并总结,如有侵权请联系更正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值