当前位置:网站首页>Detailed explanation of fastjson
Detailed explanation of fastjson
2022-08-02 01:01:00 【m0_67392409】
一、fastjson介绍
在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式.fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致.它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中.
FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包.
特点如下:
- 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean.
- 顾名思义,fastjson操作 JSON的速度是非常快的.
- 无其他包的依赖.
- 使用比较方便.
二、fastjson使用
maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<!--(起码1.2.48以上)因为这个版本一下存在漏洞-->
<version>版本根据自己需要</version>
</dependency>
三、fastjson常用API
fastjson API 入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成.
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray.
四、示例
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}
public class UserGroup {
private String name;
private List<User> users = new ArrayList<User>();
public UserGroup() {
}
public UserGroup(String name, List<User> users) {
this.name = name;
this.users = users;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserGroup{" +
"name='" + name + ''' +
", users=" + users +
'}';
}
}
1. java类转换为json字符串:
/**
* java对象转换为json字符串
*/
@Test
public void objToJson() {
//简单对象转换
User user = new User("root", "123456");
//调用toJSONString()
String userJson = JSON.toJSONString(user);
System.out.println("java类转换为json串:" + userJson);
//集合转json串
User user1 = new User("zhangsan", "123456");
User user2 = new User("lisi", "000");
List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
//调用toJSONString()
String usersjson = JSON.toJSONString(users);
System.out.println("集合转json串:" + usersjson);
//复杂java类转换对象
UserGroup userGroup = new UserGroup("userGroup", users);
//调用toJSONString()
String userGroupJson = JSON.toJSONString(userGroup);
System.out.println("复杂java类转换json串:" + userGroupJson);
}
java类转换为json串:{"password":"123456","username":"root"}
集合转json串:[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]
复杂java类转换json串:{"name":"userGroup","users":[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]}
2. json字符串转为java类:
/**
* json字符串转为java类
* 注:字符串中使用双引号需要转义 (" --> "),这里使用的是单引号,易读性会好很多.
* json串以“{}”包裹,转换为java类时,使用:parseObject();
* json串以“[]”包裹,转换为java类时,使用:parseArray();
*/
@Test
public void jsonToObj(){
/* json字符串转简单java对象
* 字符串:{"password":"123456","username":"dmego"}
*/
String jsonStr1 = "{'password':'123456','username':'ggf'}";
// 调用parseObject()
User user = JSON.parseObject(jsonStr1, User.class);
System.out.println("json字符串转简单java对象:"+user.toString());
/*
* json字符串转List<Object>对象
* 字符串:[{"password":"123123","username":"zhangsan"},
* {"password":"321321","username":"lisi"}]
*/
String jsonStr2 = "[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]";
// 调用parseArray()将字符串转为集合
List<User> users = JSON.parseArray(jsonStr2, User.class);
System.out.println("json字符串转List<Object>对象:"+users.toString());
/*json字符串转复杂java对象
* 字符串:{"name":"userGroup","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]}
* */
String jsonStr3 = "{'name':'userGroup','users':[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]}";
UserGroup userGroup = JSON.parseObject(jsonStr3, UserGroup.class);
System.out.println("json字符串转复杂java对象:"+userGroup);
}
json字符串转简单java对象:User{username='ggf', password='123456'}
json字符串转List<Object>对象:[User{username='zhangsan', password='123123'}, User{username='lisi', password='321321'}]
json字符串转复杂java对象:UserGroup{name='userGroup', users=[User{username='zhangsan', password='123123'}, User{username='lisi', password='321321'}]}
五、实际应用
1. 对复杂的json串转为java类:
首先有这么一个json字符串,这是一个羊肉汤的菜谱,数据来源于《聚合数据》
{
"resultcode":"200",
"reason":"Success",
"result":{
"data":[
{
"id":"6269",
"title":"羊肉汤",
"tags":"增强抵抗力;煮;家常菜;汤;鲁菜",
"imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!",
"ingredients":"山羊肉,500g;羊骨,1000g",
"burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量",
"albums":[
"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"
],
"steps":[
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg",
"step":"1.羊脊骨洗净用刀斩成段."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg",
"step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg",
"step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg",
"step":"4.小火煮40分钟,煮至汤色发白."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg",
"step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg",
"step":"6.捞出煮好的羊肉,晾凉后切薄片."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg",
"step":"7.碗里放入葱花,调入精盐."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg",
"step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg",
"step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."
}
]
}
],
"totalNum":"9",
"pn":0,
"rn":"1"
},
"error_code":0
}
要想解析这种复杂的字符串,把它转换成java类的话,首先得先定义好与之相符的java POJO 对象,从上面的json字符串组成来看,我们可以拆分出来四个bean:
最外层的响应:ResponseData
返回结果:ResultBean
数据:DataBean
做菜步骤:StepsBean
将拿到的json字符串数据,用GsonFormat工具来生成java类.
GsonFormat工具的使用可参考该文章:https://www.cnblogs.com/1024zy/p/6370305.html
public class ResponseData {
/**
* resultcode : 200
* reason : Success
* result : {"data":[{"id":"6269","title":"羊肉汤","tags":"增强抵抗力;煮;家常菜;汤;鲁菜","imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!","ingredients":"山羊肉,500g;羊骨,1000g","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量","albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."}]}],"totalNum":"9","pn":0,"rn":"1"}
* error_code : 0
*/
private String resultcode;
private String reason;
private ResultBean result;
private int error_code;
public String getResultcode() {
return resultcode;
}
public void setResultcode(String resultcode) {
this.resultcode = resultcode;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public ResultBean getResult() {
return result;
}
public void setResult(ResultBean result) {
this.result = result;
}
public int getError_code() {
return error_code;
}
public void setError_code(int error_code) {
this.error_code = error_code;
}
public static class ResultBean {
/**
* data : [{"id":"6269","title":"羊肉汤","tags":"增强抵抗力;煮;家常菜;汤;鲁菜","imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!","ingredients":"山羊肉,500g;羊骨,1000g","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量","albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."}]}]
* totalNum : 9
* pn : 0
* rn : 1
*/
private String totalNum;
private int pn;
private String rn;
private List<DataBean> data;
public String getTotalNum() {
return totalNum;
}
public void setTotalNum(String totalNum) {
this.totalNum = totalNum;
}
public int getPn() {
return pn;
}
public void setPn(int pn) {
this.pn = pn;
}
public String getRn() {
return rn;
}
public void setRn(String rn) {
this.rn = rn;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* id : 6269
* title : 羊肉汤
* tags : 增强抵抗力;煮;家常菜;汤;鲁菜
* imtro : 邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!
* ingredients : 山羊肉,500g;羊骨,1000g
* burden : 生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量
* albums : ["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"]
* steps : [{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."}]
*/
private String id;
private String title;
private String tags;
private String imtro;
private String ingredients;
private String burden;
private List<String> albums;
private List<StepsBean> steps;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public String getImtro() {
return imtro;
}
public void setImtro(String imtro) {
this.imtro = imtro;
}
public String getIngredients() {
return ingredients;
}
public void setIngredients(String ingredients) {
this.ingredients = ingredients;
}
public String getBurden() {
return burden;
}
public void setBurden(String burden) {
this.burden = burden;
}
public List<String> getAlbums() {
return albums;
}
public void setAlbums(List<String> albums) {
this.albums = albums;
}
public List<StepsBean> getSteps() {
return steps;
}
public void setSteps(List<StepsBean> steps) {
this.steps = steps;
}
public static class StepsBean {
/**
* img : http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg
* step : 1.羊脊骨洗净用刀斩成段.
*/
private String img;
private String step;
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getStep() {
return step;
}
public void setStep(String step) {
this.step = step;
}
}
}
}
}
对应的实体类创建后,接下来就可以使用fastjson中的方法将json串转换成对象使用了
/**
* 将复杂的json串转换为java类
*/
@Test
public void jsonToComplexObj() {
// 读取类路径下的caipu.json文件,这里使用了第三方工具hutool进行读取json文件
// 工具类参见:https://hutool.cn/docs/#/
String jsonStr = FileUtil.readUtf8String(new File("caipu.json"));
System.out.println(jsonStr);
// 转换为java类
ResponseData resp = JSON.parseObject(jsonStr, ResponseData.class);
System.out.println(resp);
// 通过对象操作数据
// 获取响应码resultcode
System.out.println(resp.getResultcode());
// 获取响应数据
ResponseData.ResultBean result = resp.getResult();
System.out.println("result响应数据:" + result);
}
输出结果:
{
"resultcode":"200",
"reason":"Success",
"result":{
"data":[
{
"id":"6269",
"title":"羊肉汤",
"tags":"增强抵抗力;煮;家常菜;汤;鲁菜",
"imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!",
"ingredients":"山羊肉,500g;羊骨,1000g",
"burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量",
"albums":[
"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"
],
"steps":[
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg",
"step":"1.羊脊骨洗净用刀斩成段."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg",
"step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg",
"step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg",
"step":"4.小火煮40分钟,煮至汤色发白."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg",
"step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg",
"step":"6.捞出煮好的羊肉,晾凉后切薄片."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg",
"step":"7.碗里放入葱花,调入精盐."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg",
"step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."
},
{
"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg",
"step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."
}
]
}
],
"totalNum":"9",
"pn":0,
"rn":"1"
},
"error_code":0
}
[email protected]
200
result响应数据:[email protected]
2. 对json串的操作:
在实际开发中,我们经常要对接口返回的json数据,进行操作,获取里面的某些数据.还是以上面的json字符串为例,使用fastjson,对json字符串进行操作
/**
* 对json串的操作
*/
@Test
public void operateJson() {
// 读取本地json文本
String jsonStr = FileUtil.readUtf8String(new File("caipu.json"));
// 创建json对象
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
// 操作json内容
// 获取响应码resultcode
System.out.println(jsonObj.get("resultcode"));
// 获取响应信息reason
System.out.println(jsonObj.getString("reason"));
// 获取data
JSONObject resJsonObj = (JSONObject)jsonObj.get("result");
System.out.println(resJsonObj.getString("data"));
}
输出结果:
200
Success
[{"albums":["http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/t/7/6269_379835.jpg"],"imtro":"邹城人有喝羊汤的习惯,春夏秋冬羊汤馆总断不了食客,春秋天气候干燥要喝,夏天入伏要喝“伏羊汤”,阴冷的冬季尤其要喝碗羊汤才够温暖.以至于邀友喝羊汤成为了礼仪;“二哥,晚上咱们喝羊汤去”.邹城的羊汤铺遍地开花,以至于单县羊汤、滕州羊汤在邹城都没有了用武之地.我们这里的羊汤做法是最纯的,基本不放煮肉的香料,就用羊骨和羊肉煮成,“肉嫩汤浓”是其特色. 煮羊汤要先煮羊骨,把羊骨斩成大段焯水后放一点羊板油用细火煮,煮到汤白味浓时放入羊肉.羊肉煮到用筷子能轻松插穿时就要捞出,久煮的话羊肉过烂就失去了软嫩的口感. 碗里放入葱花或蒜粒,调入精盐,放入切的薄薄的羊肉片.把烧的滚开的羊汤盛到碗里,洒上香菜,再挖上一匙子香辣的用羊油泼成的辣椒油,一个字“香”!","ingredients":"山羊肉,500g;羊骨,1000g","id":"6269","title":"羊肉汤","steps":[{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_95d65e77b58a1b6b.jpg","step":"1.羊脊骨洗净用刀斩成段."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a8136c10401a1643.jpg","step":"2.煮锅里倒入清水,放入羊脊骨,羊肉煮开后捞出."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7b1c9fc85ddc6de.jpg","step":"3.煮锅里倒入开水,放入羊脊骨生姜块大火煮开后改小火."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_2b284dc30b4f0875.jpg","step":"4.小火煮40分钟,煮至汤色发白."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_c7ade6439eb2db5a.jpg","step":"5.放入羊肉,加入适量的羊板油小火煮30分钟."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_579748e3b0f15963.jpg","step":"6.捞出煮好的羊肉,晾凉后切薄片."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_1550e6f127aa1077.jpg","step":"7.碗里放入葱花,调入精盐."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_a2c965d77b96da70.jpg","step":"8.放入羊肉片,把滚开的羊汤倒入碗里洒上香菜末."},{"img":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/cookbook/s/63/6269_eea9b807d1dc5995.jpg","step":"9.可以根据喜好调入陈醋放入蒜粒,最后调入辣椒油即可."}],"tags":"增强抵抗力;煮;家常菜;汤;鲁菜","burden":"生姜,适量;精盐,适量;香菜,适量;大葱,适量;辣椒油,适量;羊板油,适量"}]
六、fastjson楼栋问题
可参考文章:https://www.cnblogs.com/chaos-li/p/11139992.html
真实项目中使用建设使用版本大于:1.2.45
注意
序列化的类必须有一个无参构造方法
被序列化的类需要有一个无参的构造方法.否则会报错
Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found. class User
如果你没有重写构造方法,那么每个类都自带一个无参的构造方法,但是如果你重写了一个有参的构造方法,那么默认的无参构造方法会被覆盖,这时候就需要你手动写一个无参的构造方法进去.所以我建议保险起见,需要被json序列化的类最好都手动写一个无参的构造方法进去.
在低版本中转换的时候会直接抛以上异常信息(测试版本:fastjson-1.1.12).但是高版本(fastjson-1.2.58)就不会报错.
建议在定义javabean时都把无参和有参定义.
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在.深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小.自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前.因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
第 45 届ICPC亚洲区域赛(上海)G-Fibonacci
Kubernetes — Flannel
canal实现mysql数据同步
C语言实现扫雷游戏
Redis - message publish and subscribe
flowable工作流所有业务概念
百度、百图生科 | HelixFold-Single: 使用蛋白质语言模型作为替代进行无MSA蛋白质结构预测
Automatic conversion of Oracle-style implicit joins to ANSI JOINs using jOOQ
ICML 2022 || 局部增强图神经网络GNN,在 GCN 和 GAT基础上 平均提高了 3.4% 和 1.6%
随机推荐
ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
JS中清空数组的方法
思维导图,UML在线画图工具
ELK日志分析系统
Don't concatenate strings with jOOQ
PowerBI商学院佐罗BI真经连续剧
JS中的防抖和节流
How to use the go language standard library fmt package
字符串分割函数strtok练习
Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
Go 1.18 的那些事——工作区、模糊测试、泛型
Redis和MySQL数据一致性问题,有没有好的解决方案?
好的期货公司开户让人省心省钱
Kotlin协程:创建、启动、挂起、恢复
Kubernetes — Flannel
go笔记——锁
ES6对箭头函数的理解
Stapler:1 靶机渗透测试-Vulnhub(STAPLER: 1)
内部类、异常简单介绍(第十天)
GateWay实现负载均衡