文章目录

一、基本数据格式

给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。

JSON的基本数据格式有这几种:

1. 一个JSON对象

JSONObject

{
"name": "胡小威",
"age": 20,
"male": true
}
2.一个JSON数组

JSONArray

[
{
"name": "胡小威",
"age": 20,
"male": true
},
{
"name": "赵小亮",
"age": 22,
"male": false
}
]
3.复杂JSONObject
{
"name": "胡小威",
"age": 20,
"male": true,
"address": {
"street": "岳麓山南",
"city": "长沙",
"country": "中国"
}
}
4. 复杂JSONArray
[
{
"name": "胡小威",
"age": 20,
"male": true,
"address": {
"street": "岳麓山南",
"city": "长沙",
"country": "中国"
}
},
{
"name": "赵小亮",
"age": 22,
"male": false,
"address": {
"street": "九州港",
"city": "珠海",
"country": "中国"
}
}
]
5.更复杂的json

爱帮公交上扒取的数据

{
"buses": {
"bus": [
{
"last_foot_dist": "0",
"time": "37",
"segments": {
"segment": [
{
"line_name": "立珊专线(中南大学学生公寓-长沙火车站)",
"foot_dist": "362",
"stat_xys": "",
"stats": "岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站",
"end_stat": "长沙火车站",
"line_xys": "",
"line_dist": "7535",
"start_stat": "岳麓山南"
}
]
},
"foot_dist": "362",
"dist": "7897"
},
{
"last_foot_dist": "0",
"time": "41",
"segments": {
"segment": [
{
"line_name": "旅1路(科教新村-长沙火车站)",
"foot_dist": "337",
"stat_xys": "",
"stats": "岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站",
"end_stat": "长沙火车站",
"line_xys": "",
"line_dist": "7822",
"start_stat": "岳麓山南"
}
]
},
"foot_dist": "337",
"dist": "8159"
}
]
}
}
二、解析
2.1. JSONObject解析
{
"name": "胡小威",
"age": 20,
"male": true
}
package com.gblfy;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.gblfy.utils.FastJsonUtil;
import org.junit.Test;

import java.util.List;

public class JsonApplicationTests {

//把JSON数据转换成指定的java对象
@Test
public void fastJsonTest() {
Student st = new Student().builder()
.name("雨昕")
.age(2)
.build();

String json = FastJsonUtil.getBeanToJson(st);
System.out.println("********对象转Json*********");
System.out.println("json ::" + json);
System.out.println("********Json转对象*********");
Student newst = FastJsonUtil.getJsonToBean(json, Student.class);
System.out.println("Name ::" + newst.getName());
System.out.println("Age ::" + newst.getAge());
}


//解析JsonObject
@Test
public void parseJsonObject() {
try {
String json = "{\n" +
" \"name\": \"胡小威\",\n" +
" \"age\": 20,\n" +
" \"male\": true\n" +
"}";

System.out.println("*********单纯的从json数据中获取对应的值*********");
JSONObject jb = JSON.parseObject(json);
String name = jb.getString("name");
int age = jb.getInteger("age");
boolean male = jb.getBoolean("male");

System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("male:" + male);

System.out.println("*********把JSON数据转换成指定的java对象*********");
Student st = FastJsonUtil.getJsonToBean(json, Student.class);
System.out.println("*********Student*********");

System.out.println("name:" + st.getName());
System.out.println("age:" + st.getAge());
System.out.println("male:" + st.isMale());

//接下来该干嘛干嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//解析JSONArray
@Test
public void parseJSONArray() {
String json = "[\n" +
" {\n" +
" \"name\": \"胡小威\",\n" +
" \"age\": 20,\n" +
" \"male\": true\n" +
" },\n" +
" {\n" +
" \"name\": \"赵小亮\",\n" +
" \"age\": 22,\n" +
" \"male\": false\n" +
" }\n" +
"]";
try {

System.out.println("*********把JSON数据转换成指定的java对象列表*********");
List<Student> jsonToList = FastJsonUtil.getJsonToList(json, Student.class);
for (Student st : jsonToList) {
System.out.println("name: " + st.getName());
System.out.println("age: " + st.getAge());
System.out.println("male: " + st.isMale());
}

System.out.println("*********解析JSONArray*********");
JSONArray jsonArray = JSON.parseArray(json);
for (Object o : jsonArray) {
Student st = (Student) o;
System.out.println("name: " + st.getName());
System.out.println("age: " + st.getAge());
System.out.println("male: " + st.isMale());
}

//接下来该干嘛干嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//解析复杂JSONObject
@Test
public void parseJsonPerson() {
String json = "{\n" +
" \"name\": \"胡小威\",\n" +
" \"age\": 20,\n" +
" \"male\": true,\n" +
" \"address\": {\n" +
" \"street\": \"岳麓山南\",\n" +
" \"city\": \"长沙\",\n" +
" \"country\": \"中国\"\n" +
" }\n" +
"}";
try {
JSONObject jb = JSON.parseObject(json);
String name = jb.getString("name");
int age = jb.getInteger("age");
boolean male = jb.getBoolean("male");

JSONObject addressJSON = jb.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");

Address address = new Address(street, city, country);
Student student = new Student(name, age, male, address);

System.out.println("name: " + name);
System.out.println("age: " + age);
System.out.println("male: " + male);

System.out.println("street: " + street);
System.out.println("city: " + city);
System.out.println("country: " + country);

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//解析复杂JSONArray
@Test
public void parseJsonArrayPerson() {
String json="[\n" +
" {\n" +
" \"name\": \"胡小威\",\n" +
" \"age\": 20,\n" +
" \"male\": true,\n" +
" \"address\": {\n" +
" \"street\": \"岳麓山南\",\n" +
" \"city\": \"长沙\",\n" +
" \"country\": \"中国\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"name\": \"赵小亮\",\n" +
" \"age\": 22,\n" +
" \"male\": false,\n" +
" \"address\": {\n" +
" \"street\": \"九州港\",\n" +
" \"city\": \"珠海\",\n" +
" \"country\": \"中国\"\n" +
" }\n" +
" }\n" +
"]";
try {
System.out.println("*********把JSON数据转换成指定的java对象列表*********");
List<Student> jsonToList = FastJsonUtil.getJsonToList(json, Student.class);
for (Student st : jsonToList) {
System.out.println("name: " + st.getName());
System.out.println("age: " + st.getAge());
System.out.println("male: " + st.isMale());

Address address = st.getAddress();
System.out.println("street: " + address.getStreet());
System.out.println("city: " + address.getCity());
System.out.println("country: " + address.getCountry());

Student student = new Student(st.getName(), st.getAge(), st.isMale(), address);
System.out.println("student"+student.toString());
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Test
public void parseJSON(){
String json="{\n" +
" \"buses\": {\n" +
" \"bus\": [\n" +
" {\n" +
" \"last_foot_dist\": \"0\",\n" +
" \"time\": \"37\",\n" +
" \"segments\": {\n" +
" \"segment\": [\n" +
" {\n" +
" \"line_name\": \"立珊专线(中南大学学生公寓-长沙火车站)\",\n" +
" \"foot_dist\": \"362\",\n" +
" \"stat_xys\": \"\",\n" +
" \"stats\": \"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站\",\n" +
" \"end_stat\": \"长沙火车站\",\n" +
" \"line_xys\": \"\",\n" +
" \"line_dist\": \"7535\",\n" +
" \"start_stat\": \"岳麓山南\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" \"foot_dist\": \"362\",\n" +
" \"dist\": \"7897\"\n" +
" },\n" +
" {\n" +
" \"last_foot_dist\": \"0\",\n" +
" \"time\": \"41\",\n" +
" \"segments\": {\n" +
" \"segment\": [\n" +
" {\n" +
" \"line_name\": \"旅1路(科教新村-长沙火车站)\",\n" +
" \"foot_dist\": \"337\",\n" +
" \"stat_xys\": \"\",\n" +
" \"stats\": \"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站\",\n" +
" \"end_stat\": \"长沙火车站\",\n" +
" \"line_xys\": \"\",\n" +
" \"line_dist\": \"7822\",\n" +
" \"start_stat\": \"岳麓山南\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" \"foot_dist\": \"337\",\n" +
" \"dist\": \"8159\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
try {
JSONObject jb = JSON.parseObject(json);
String buses = jb.getString("buses");
JSONObject jb2 = JSON.parseObject(buses);
String bus2 = jb2.getString("bus");
List<BusChild> bus = JSON.parseArray(bus2, BusChild.class);
for (BusChild busChild : bus) {
List<Segment> segmentList = busChild.getSegments();
for (Segment segment : segmentList) {

}
}

// String bus = jb.getString("bus");


// Bus bus = FastJsonUtil.getJsonToBean(buses, Bus.class);
// BusChild busChild = bus.getBusChild();
// List<Segment> segments = busChild.getSegments();
// for (Segment segment : segments) {
//
// }



// List<BusChild> busChildList = FastJsonUtil.getJsonToList(buses, BusChild.class);
// for (BusChild busChild : busChildList) {
// List<Segment> segmentList = busChild.getSegments();
// for (Segment segment : segmentList) {
//
// }
// }
//
// JSONObject jb2 = JSON.parseObject(buses);
//
// String bus = jb2.getString("bus");

// JSONObject jb3 = JSON.parseObject(bus);
// String segments = jb3.getString("segments");
//
// List<Segment> jsonToList = FastJsonUtil.getJsonToList(segments, Segment.class);
//
// for (Segment segment : jsonToList) {
//
// }
// for (BusChild busChild : jsonToList) {
// System.out.println(""+busChild.getLastFootDist());
// System.out.println(""+busChild.getTime());
// System.out.println(""+busChild.getFootDist());
// System.out.println(""+busChild.getDist());
//
// List<Segments> segmentsList = busChild.getSegments();
// for (Segments segment : segmentsList) {
// System.out.println("line_name: "+segment.getLineName());
// System.out.println("foot_dist: "+segment.getFootDist());
// System.out.println("stat_xys: "+segment.getStatXys());
// System.out.println("stats: "+segment.getStats());
// System.out.println("end_stat: "+segment.getEndStat());
// System.out.println("line_xys: "+segment.getLineXys());
// System.out.println("line_dist: "+segment.getLineDist());
// System.out.println("start_stat: "+segment.getStartStat());
// }
//
// }
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//序列化时指定json的key值
public static void main(String[] args) {
Segment build = new Segment().builder()
.foot_dist("123")
.start_stat("456")
.stats("2").build();
System.out.println("sss"+JSON.toJSONString(build));

}
}

`package com.gblfy.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.TypeReference;

import java.util.List;
import java.util.Map;

public class FastJsonUtil {

/**
* 功能描述:把JSON数据转换成指定的java对象
*
* @param jsonData JSON数据
* @param clazz 指定的java对象
* @return 指定的java对象
*/
public static <T> T getJsonToBean(String jsonData, Class<T> clazz) {
return JSON.parseObject(jsonData, clazz);
}

/**
* 功能描述:把java对象转换成JSON数据
*
* @param object java对象
* @return JSON数据
*/
public static String getBeanToJson(Object object) {
return JSON.toJSONString(object);
}

/**
* 功能描述:把JSON数据转换成指定的java对象列表
*
* @param jsonData JSON数据
* @param clazz 指定的java对象
* @return List<T>
*/
public static <T> List<T> getJsonToList(String jsonData, Class<T> clazz) {
return JSON.parseArray(jsonData, clazz);
}

/**
* 功能描述:把JSON数据转换成较为复杂的List<Map<String, Object>>
*
* @param jsonData JSON数据
* @return List<Map < String, Object>>
*/
public static List<Map<String, Object>> getJsonToListMap(String jsonData) {
return JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
});
}

/**
* List<T> 转 json 保存到数据库
*/
public static <T> String listToJson(List<T> ts) {
String jsons = JSON.toJSONString(ts);
return jsons;
}

/**
* 两个类之间值的转换
* 从object》》tClass
*
* @param object 有数据的目标类
* @param tClass 转换成的类
* @param <T>
* @return 返回tClass类
*/
public static <T> T getObjectToClass(Object object, Class<T> tClass) {
String json = getBeanToJson(object);
return getJsonToBean(json, tClass);
}

/**
* json 转 List<T>
*/
public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
@SuppressWarnings("unchecked")
List<T> ts = JSONArray.parseArray(jsonString, clazz);
return ts;
}

}`、