java json解析哪个好_java常用的几种json解析工具使用

头痛,某群初学朋友问我他解析json怎么和他以前学的不一样,我本着说百度个教程给他,一搜索乱七八糟复制来复制去的博客一大堆,注释不写注视,一个是gson 一个是fastJson标题也没写明白,行那就我来自己敲一遍,我来总结一下,不对的地方请指教。

首先json的官方网站

再次我们常用的解析工具

1、JSON 官方出品(非常多种,这里使用org.json)

2、GSON 谷歌出品

3、FastJSON 阿里出品

4、jackson SpringMVC内置解析

逐一试用一下,所需jar包,直接导入或maven自行找加载方式

测试前创建两个类

package json;

public class Person {

private int id;

private String name;

private int age;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Person{" +

"id=" + id +

", name='" + name + '\'' +

", age=" + age +

'}';

}

}

package json;

import java.util.ArrayList;

public class Departamentas {

private int id;

private String name;

private ArrayList persons;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public ArrayList getPersons() {

return persons;

}

public void setPersons(ArrayList persons) {

this.persons = persons;

}

@Override

public String toString() {

return "Departamentas{" +

"id=" + id +

", name='" + name + '\'' +

", persons=" + persons +

'}';

}

}

一、官方org.json(麻烦一批不好用)

使用代码如下

package json;

import org.json.JSONArray;

import org.json.JSONObject;

import org.junit.jupiter.api.Test;

public class JsonTest {

@Test

public void jsonOrg() {

//解析json

String json1 = "{'id':1,'name':'bai123'," +

"'person':[" +

"{'id':5,'name':'白蓝一','age':18}," +

"{'id':6,'name':'白蓝二','age':18}" +

"]}";

JSONObject jObject1 = new JSONObject(json1);

//获取对应key的值

System.out.println(jObject1.get("name"));

//拿到person数组

JSONArray person1 = jObject1.getJSONArray("person");

//获取对应索引的值

System.out.println(person1.get(0));

//--------------------------------------------------------

//生成json

JSONObject jo1 = new JSONObject();

jo1.put("id", 7);

jo1.put("name", "白蓝三");

jo1.put("age", 18);

JSONArray ja2 = new JSONArray();

ja2.put(jo1);

JSONObject jo3 = new JSONObject();

jo3.put("id", 2);

jo3.put("name", "bai124");

jo3.put("person", ja2);

String json = jo3.toString();

System.out.println(json);

}

}

打印结果

ae9e3e562c31

image.png

二、Gson 比较好用

上代码,非常方便

package json;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;

public class GsonTest {

@Test

public void gson() {

//解析json

String json1 = "{'id':1,'name':'bai123'," +

"'persons':[" +

"{'id':5,'name':'白蓝一','age':18}," +

"{'id':6,'name':'白蓝二','age':18}" +

"]}";

Gson gson = new Gson();

Departamentas departamentas = gson.fromJson(json1, Departamentas.class);

System.out.println(departamentas);

//生成json

departamentas.setName("bai124");

String json = gson.toJson(departamentas);

System.out.println(json);

}

}

打印结果

ae9e3e562c31

image.png

三、fastjson 效率高非常好用

package json;

import com.alibaba.fastjson.JSON;

import org.junit.jupiter.api.Test;

import java.util.List;

public class FastTest {

@Test

public void fast() {

//解析json

String json1 = "{'id':1,'name':'bai123'," +

"'persons':[" +

"{'id':5,'name':'白蓝一','age':18}," +

"{'id':6,'name':'白蓝二','age':18}" +

"]}";

String json2 = "['白蓝1','白蓝2','白蓝3']";

Departamentas departamentas = JSON.parseObject(json1, Departamentas.class);

System.out.println(departamentas);

//数组解析

List list = JSON.parseArray(json2, String.class);

System.out.println(list);

//生成json

departamentas.setName("生成");

String s = JSON.toJSONString(departamentas);

System.out.println(s);

}

}

打印结果

ae9e3e562c31

image.png

四、jackson SpringMVC内置的解析器用的就是这个

注意事项

//允许出现特殊字符和转义符

mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true) ;

//允许出现单引号

mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true) ;

package json;

import com.fasterxml.jackson.core.type.TypeReference;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.junit.jupiter.api.Test;

import java.io.IOException;

import java.util.ArrayList;

public class JackTest {

@Test

public void jack() throws IOException {

//解析json

String json1 = "{\"id\":1,\"name\":\"bai123\",\"persons\":[{\"id\":1,\"name\":\"白蓝1\",\"age\":20}]}";

String json2 = "[\"白蓝1\",\"白蓝2\",\"白蓝3\"]";

ObjectMapper mapper = new ObjectMapper();

Departamentas departamentas = mapper.readValue(json1, Departamentas.class);

System.out.println(departamentas);

//2、

ArrayList list = mapper.readValue(json2,

new TypeReference>() {

});

System.out.println(list);

//生成json

String json=mapper.writeValueAsString(departamentas);

System.out.println(json);

}

}

打印结果

ae9e3e562c31

image.png

本文是几个工具的简单使用,其他方法请自行查询相关API,例如解决时间格式化之类的,可以使用对应的注解,并且要注意的是除了官方的其他3个都是需要使用标准bean.

转载请注明来源。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值