今日,公司由于要求写一个SDK打成jar包,便于以后直接调用,因为接口参数要求是json格式的,所以做完之后在这里就总结一下,和各位道友分享。
首先,我这里使用的json工具是阿里巴巴的fastjson,maven依赖在这里:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
其实,平时json的使用也就两种,1数据转json; 2.json解析成数据。
由于说明都在代码中,所以各位道友只管尽情的享受阅读代码的快感即可。
第一:数据转json:
package com.google.fastJson;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.Map;
/**
* 将数据转换为json数据,使用"JSON.toJSONString(Object obj)"方法;
*/
public class Demo01 {
public static void main(String[] args){
/**
* 注意比较下面两种json数据格式:一种是"{}"形式,另一种是"[{},{}]"的
* 我们可以这样理解:json的标准数据格式是"{key:value}"的形式.
* key,value为json的基础元素,{}将基础元素封装成一个对象,[{},{},...]是将这些对象封装成一个数组;
*/
String json01=test01();
System.out.println(json01);//{"name":"zhangsan","age":14}
String json02=test02();
System.out.println(json02);//[{"name":"zhangsan","age":11},{"address":"新疆","tel":"13056897412"}]
}
public static String test01(){
Map<String,Object> map=new HashMap<>();
map.put("name","zhangsan");
map.put("age",14);
String jsonStr=JSON.toJSONString(map);
return jsonStr;
}
public static String test02(){
Object[] obj=new Object[2];
Map<String,Object> map1=new HashMap<>();
map1.put("name","zhangsan");
map1.put("age",11);
Map<String,Object> map2=new HashMap<>();
map2.put("address","新疆");
map2.put("tel","13056897412");
obj[0]=map1;
obj[1]=map2;
String jsonStr=JSON.toJSONString(obj);
return jsonStr;
}
}
第二:解析json数据:
package com.google.fastJson;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 之前讲了将数据转换为json格式,这里讲如何从json数据中获取数据,即为逆过程。分三种情况:
*/
public class Demo02 {
public static void main(String[] args){
test01(); //结果:年龄=zhangsan,年龄=12
test02(); //姓名=zhangsan,年龄=11,爱好=null 姓名=null,年龄=null,爱好=soccer
//name=zhaoyun
//age=666
//schoolName=家里蹲
//schoolCode=110
//mathTecherName=刘备
//mathTeacherAge=54
//englishTeacherName=关羽
//mathTeacherAge=110
test03();
}
/**
* 第一种情况:简单对象类型:如"{"name":"zhangsan","age":12}"
*/
public static void test01(){
//定义一个json字符串:
String jsonStr="{\"name\":\"zhangsan\",\"age\":12}"; //这里的\"表示转义字符;
//使用JSON.parseObject(String str)将字符串解析为json对象:
JSONObject jo=JSON.parseObject(jsonStr);
String name=jo.getString("name");
int age=jo.getInteger("age");
System.out.println("年龄="+name+",年龄="+age);
}
/**
* 第二种情况:数组类型:如:
* [{"name":"zhangsan","age":11},{"like":"soccer"}]
*/
public static void test02(){
//定义一个json字符串:
String jsonStr="[{\"name\":\"zhangsan\",\"age\":11},{\"like\":\"soccer\"}]";
//使用JSON.parseArray(String str)解析数组类型的json数据:
JSONArray ja=JSON.parseArray(jsonStr); //返回的实际上是一个list容器
//遍历这个容器
for(int i=0;i<ja.size();i++){
JSONObject jo=ja.getJSONObject(i);
System.out.println("姓名="+jo.getString("name")+",年龄="+jo.getInteger("age")+",爱好="+jo.getString("like"));
}
//或者使用foreach遍历也可以:
for(Object obj:ja){
JSONObject jo=(JSONObject)obj;
System.out.println("姓名="+jo.getString("name")+",年龄="+jo.getInteger("age")+",爱好="+jo.getString("like"));
}
}
/**
* 第三种情况:比较复杂的json数据格式:例如:
* {
* "name":"zhaoyun",
* "age":666,
* "school":{
* "schoolName":"家里蹲",
* "schoolCode":110
* },
* "teacher":[
* {
* "mathTecherName":"刘备",
* "mathTeacherAge":54
* },
* {
* "englishTeacherName":"关羽",
* "englishTeacherAge":110
* }
* ]
* }
*
*/
public static void test03(){
String jsonStr="{\"name\":\"zhaoyun\",\"age\":666,\"school\":{\"schoolName\":\"家里蹲\",\"schoolCode\":\"110\"},\"teacher\":[{\"mathTecherName\":\"刘备\",\"mathTeacherAge\":54},{\"englishTeacherName\":\"关羽\",\"englishTeacherAge\":110}]}";
JSONObject jo=JSON.parseObject(jsonStr);
String name=jo.getString("name");
int age=jo.getInteger("age");
System.out.println("name="+name);
System.out.println("age="+age);
//这一步注意了:
JSONObject jo2=jo.getJSONObject("school");
String schoolName=jo2.getString("schoolName");
int schoolCode=jo2.getInteger("schoolCode");
System.out.println("schoolName="+schoolName);
System.out.println("schoolCode="+schoolCode);
//这一步更要注意了:
JSONArray ja=jo.getJSONArray("teacher");
for(int i=0;i<ja.size();i++){
JSONObject jo3=ja.getJSONObject(i);
if(i==0){
String mathTecherName=jo3.getString("mathTecherName");
int mathTeacherAge=jo3.getInteger("mathTeacherAge");
System.out.println("mathTecherName="+mathTecherName);
System.out.println("mathTeacherAge="+mathTeacherAge);
}
if(i==1){
String englishTeacherName=jo3.getString("englishTeacherName");
int englishTeacherAge=jo3.getInteger("englishTeacherAge");
System.out.println("englishTeacherName="+englishTeacherName);
System.out.println("mathTeacherAge="+englishTeacherAge);
}
}
}
}