java解析阿里巴巴json_阿里fastjson解析

本文详细介绍了如何使用阿里巴巴的Fastjson库在Java中解析JSON格式的数据。通过示例展示了从JSON字符串到JSONObject、JSONArray的转换,并进一步转换为Java对象。包括简单对象、数组类型以及复杂格式的JSON字符串的解析方法。
摘要由CSDN通过智能技术生成

解析案例

String object="{total=1, rows=[{_Account=3646808, UserID=131514, Mt4Name=SewwoaIQQS, ServerID=14, InMoney=7911.0, OutMoney=6479.76, Balance=3001.95, Margin=0.0, Equity=2406.6, Profit=-595.35, GroupName=W-Default, Leverage=200, TradeFee=0.0, CreateTime=2017-08-09T06:55:28.14, Status=1, IsReal=0, Credit=0.0}]}";

JSONObject jsonObject= JSON.parseObject(object);

JSONArray jsonArray=jsonObject.getJSONArray("rows");

JSONObject detail=jsonArray.getJSONObject(0);

Double equity=detail.getDouble("Equity");

参考

fastJson对于json格式字符串的解析主要用到了一下三个类:

JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。

JSONObject:fastJson提供的json对象。

JSONArray:fastJson提供json数组对象。

此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。

首先定义三个json格式的字符串,作为我们的数据源。

//json字符串-简单对象型

private static final String JSON_OBJ_STR = "{"studentName":"lily","studentAge":12}";

//json字符串-数组类型

private static final String JSON_ARRAY_STR = "[{"studentName":"lily","studentAge":12},{"studentName":"lucy","studentAge":15}]";

//复杂格式json字符串

private static final String COMPLEX_JSON_STR = "{"teacherName":"crystall","teacherAge":27,"course":{"courseName":"english","code":1270},"students":[{"studentName":"lily","studentAge":12},{"studentName":"lucy","studentAge":15}]}";

示例1:JSON格式字符串与JSON对象之间的转换。

示例1.1-json字符串-简单对象型与JSONObject之间的转换

/**

* json字符串-简单对象型与JSONObject之间的转换

*/

public static void testJSONStrToJSONObject(){

JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);

//JSONObject jsonObject1 = JSONObject.parseObject(JSON_OBJ_STR); //因为JSONObject继承了JSON,所以这样也是可以的

System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));

}

示例1.2-json字符串-数组类型与JSONArray之间的转换

/**

* json字符串-数组类型与JSONArray之间的转换

*/

public static void testJSONStrToJSONArray(){

JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);

//JSONArray jsonArray1 = JSONArray.parseArray(JSON_ARRAY_STR);//因为JSONArray继承了JSON,所以这样也是可以的

//遍历方式1

int size = jsonArray.size();

for (int i = 0; i < size; i++){

JSONObject jsonObject = jsonArray.getJSONObject(i);

System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));

}

//遍历方式2

for (Object obj : jsonArray) {

JSONObject jsonObject = (JSONObject) obj;

System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));

}

}

示例1.3-复杂json格式字符串与JSONObject之间的转换

/**

* 复杂json格式字符串与JSONObject之间的转换

*/

public static void testComplexJSONStrToJSONObject(){

JSONObject jsonObject = JSON.parseObject(COMPLEX_JSON_STR);

//JSONObject jsonObject1 = JSONObject.parseObject(COMPLEX_JSON_STR);//因为JSONObject继承了JSON,所以这样也是可以的

String teacherName = jsonObject.getString("teacherName");

Integer teacherAge = jsonObject.getInteger("teacherAge");

JSONObject course = jsonObject.getJSONObject("course");

JSONArray students = jsonObject.getJSONArray("students");

}

示例2:JSON格式字符串与javaBean之间的转换。

首先,我们针对数据源所示的字符串,提供三个javaBean。

public class Student {

private String studentName;

private Integer studentAge;

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

}

public Integer getStudentAge() {

return studentAge;

}

public void setStudentAge(Integer studentAge) {

this.studentAge = studentAge;

}

}

public class Course {

private String courseName;

private Integer code;

public String getCourseName() {

return courseName;

}

public void setCourseName(String courseName) {

this.courseName = courseName;

}

public Integer getCode() {

return code;

}

public void setCode(Integer code) {

this.code = code;

}

}

public class Teacher {

private String teacherName;

private Integer teacherAge;

private Course course;

private List students;

public String getTeacherName() {

return teacherName;

}

public void setTeacherName(String teacherName) {

this.teacherName = teacherName;

}

public Integer getTeacherAge() {

return teacherAge;

}

public void setTeacherAge(Integer teacherAge) {

this.teacherAge = teacherAge;

}

public Course getCourse() {

return course;

}

public void setCourse(Course course) {

this.course = course;

}

public List getStudents() {

return students;

}

public void setStudents(List students) {

this.students = students;

}

}

json字符串与javaBean之间的转换推荐使用 TypeReference

这个类,使用泛型可以更加清晰,当然也有其它的转换方式,这里就不做探讨了。

示例2.1-json字符串-简单对象型与javaBean之间的转换

/**

* json字符串-简单对象与JavaBean_obj之间的转换

*/

public static void testJSONStrToJavaBeanObj(){

Student student = JSON.parseObject(JSON_OBJ_STR, new TypeReference() {});

//Student student1 = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference() {});//因为JSONObject继承了JSON,所以这样也是可以的

System.out.println(student.getStudentName()+":"+student.getStudentAge());

}

示例2.2-json字符串-数组类型与javaBean之间的转换

/**

* json字符串-数组类型与JavaBean_List之间的转换

*/

public static void testJSONStrToJavaBeanList(){

ArrayList students = JSON.parseObject(JSON_ARRAY_STR, new TypeReference>() {});

//ArrayList students1 = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference>() {});//因为JSONArray继承了JSON,所以这样也是可以的

for (Student student : students) {

System.out.println(student.getStudentName()+":"+student.getStudentAge());

}

}

示例2.3-复杂json格式字符串与与javaBean之间的转换

/**

* 复杂json格式字符串与JavaBean_obj之间的转换

*/

public static void testComplexJSONStrToJavaBean(){

Teacher teacher = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference() {});

//Teacher teacher1 = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference() {});//因为JSONObject继承了JSON,所以这样也是可以的

String teacherName = teacher.getTeacherName();

Integer teacherAge = teacher.getTeacherAge();

Course course = teacher.getCourse();

List students = teacher.getStudents();

}

对于TypeReference

,由于其构造方法使用 protected 进行修饰,所以在其他包下创建其对象的时候,要用其实现类的子类:new TypeReference

() {}

此外的:

1,对于JSON对象与JSON格式字符串的转换可以直接用 toJSONString()这个方法。

2,javaBean与JSON格式字符串之间的转换要用到:JSON.toJSONString(obj);

3,javaBean与json对象间的转换使用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值