概述
最近在进行数据解析的工作,遇到了Json和对象之间的转化等问题,使用了com.alibaba.fastjson.JSONObject
阿里的解析工具进行了处理,这里记录下一些常用的方法.
环境
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.50</version>
</dependency>
</dependencies>
常用方法测试
package cn.zhangyu.jsonobject;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import java.util.ArrayList;
import java.util.List;
public class JsonClass {
public static void main(String[] args) {
//把json字符互传转化为对象
//json2Bean();
//把json字符串转化为List<Bean>
//json2ListBean();
//把json字符串转化为List<Bean>
//json2ListBean1();
// bean2Json();
//复杂类型的bean转化为json
//complexBean2Json();
//复杂类型的json转化为bean; 对比parseObject和parseArray区别
//complexJson2Bean();
//遍历json串中的属性值
get();
}
public static void json2Bean(){
String jsonStr = "{\"id\":1001,\"name\":\"Jobs\"}";
User user = JSONObject.parseObject(jsonStr, User.class);
System.out.println(user);
}
public static void json2ListBean(){
String jsonStr = "[{\"id\":1001,\"name\":\"Jobs\"},{\"id\":1002,\"name\":\"jack\"}]";
List<User> list1 = JSONObject.parseObject(jsonStr, new TypeReference<List<User>>() {});
list1.forEach(user -> System.out.println(user));
}
private static void json2ListBean1() {
String jsonStr = "[{\"id\":1001,\"name\":\"Jobs\"},{\"id\":1002,\"name\":\"jack\"}]";
List<User> users = JSONObject.parseArray(jsonStr, User.class);
users.forEach(user -> System.out.println(user));
}
public static void bean2Json(){
String tom = JSONObject.toJSONString(new User(1000, "tom"));
System.out.println(tom);
}
public static void complexBean2Json(){
Dog dog = new Dog("大黄","yellow");
Dog dog1 = new Dog("小黑","black");
List<Dog> list = new ArrayList<>();
list.add(dog);
list.add(dog1);
Person person = new Person("张三",list);
String jsonString = JSONObject.toJSONString(person);
System.out.println(jsonString);
}
public static void complexJson2Bean(){
String jsonString = "{\"dog\":[{\"color\":\"yellow\",\"name\":\"大黄\"},{\"color\":\"black\",\"name\":\"小黑\"}],\"name\":\"张三\"}";
//错误方式
//List<Person> people = JSONObject.parseArray(jsonString, Person.class);
List<Person> people = JSONObject.parseArray(jsonString, Person.class);
//准确方式
Person person = JSONObject.parseObject(jsonString, new TypeReference<Person>() {});
System.out.println(person);
}
public static void get(){
String jsonStr = "{\"id\":1001,\"name\":\"Jobs\"}";
JSONObject.parseObject(jsonStr).forEach((key,value) -> System.out.println(key+"="+value));
}
//TODO...
}
实体类
- user
package cn.zhangyu.jsonobject;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 6985088697258756730L;
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
- person
package cn.zhangyu.jsonobject;
import java.util.List;
public class Person {
private String name;
private List<Dog> dog;
public Person(String name, List<Dog> dog) {
this.name = name;
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Dog> getDog() {
return dog;
}
public void setDog(List<Dog> dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", dog=" + dog +
'}';
}
}
- Dog
package cn.zhangyu.jsonobject;
public class Dog {
private String name;
private String color;
public Dog(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
方法测试中都是一些基本的方法,网上也有很多资料,大家应该很容易看懂,就不多解释了.详细的可以继续查看源码.后续作者用到的方法也会继续加进去.