最近項目裏搞很複雜的json數據,藉此機會整理了一下fastJSON操作各種格式的json數據;舉一反三,學會以下幾種JSON數據類型的操作,其他再複雜的json數據也能輕鬆解決;
如果是maven項目,首先引入fastjson依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</dependency>
1 最簡單得到Map格式的json數據
{
"name": "李四",
"age": 20 ,
"sex": "男"
}
測試
package com.maltose.util;
import com.alibaba.fastjson.JSONObject;
import java.util.Map;
/**
* @author sgw
* @DATE 20200625
*/
public class FastJsonTest {
public static void main(String[] args) {
String jsonData = "{\n" + "\t\"name\": \"李四\",\n" + "\t\"age\": 20 ,\n" + "\t\"sex\": \"男\"\n" + "}";
Map map = (Map) JSONObject.parse(jsonData);
System.out.println(map.get("name") + "," + map.get("age") + "," + map.get("sex"));
}
}
結果
2 json裏嵌套json(不含數組)
即Map裏嵌套Map
{
"user1": {
"username": "張三",
"age": 21
},
"user2": {
"username": "Tom",
"age": 39
},
"user3": {
"username": "李四",
"age": 43
}
}
測試
package com.maltose.util;
import com.alibaba.fastjson.JSONObject;
import java.util.Iterator;
import java.util.Set;
/**
* @author sgw
* @DATE 20200625
*/
public class FastJsonTest {
public static void main(String[] args) {
String jsonData = "{\n" +
"\t\"user1\": {\n" +
"\t\t\"username\": \"張三\",\n" +
"\t\t\"age\": 21\n" +
"\t},\n" +
"\t\"user2\": {\n" +
"\t\t\"username\": \"Tom\",\n" +
"\t\t\"age\": 39\n" +
"\t},\n" +
"\t\"user3\": {\n" +
"\t\t\"username\": \"李四\",\n" +
"\t\t\"age\": 43\n" +
"\t}\n" +
"}";
//先將這條數據解析爲JSONObject
JSONObject jsonObject = JSONObject.parseObject(jsonData);
//我們需要得到user,才能得到它對應的內部json
Set<String> jsonSet = jsonObject.keySet();
Iterator<String> iterator = jsonSet.iterator();
while (iterator.hasNext()){
//通過迭代器可以取到外部json的key
String json = iterator.next();
//取得內部json字符串
String string = jsonObject.getString(json);
//將內部json字符串解析爲object對象
JSONObject inJson = JSONObject.parseObject(string);
//通過score,得到value值
String name = inJson.getString("username");
String age = inJson.getString("age");
System.out.println(name+":"+age);
}
}
}
結果
3 數組格式的json數據
[
{
"studentName": "lily",
"studentAge": 12
},
{
"studentName": "lucy ",
"studentAge": 15
}
]
測試
package com.maltose.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import java.util.Map;
/**
* @author sgw
* @DATE 20200625
*/
public class FastJsonTest {
public static void main(String[] args) {
String arryJsonData="[\n" +
" {\n" +
"\t\t\"studentName\": \"lily\",\n" +
"\t\t\"studentAge\": 12\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"studentName\": \"lucy \",\n" +
"\t\t\"studentAge\": 15\n" +
"\t}\n" +
"]";
//需要使用的JSON的parseArray方法,將arryJsonData解析爲object類型的數組
JSONArray jsonArray = JSON.parseArray(arryJsonData);
for (int i = 0; i < jsonArray.size(); i++) {
Map map =(Map) jsonArray.get(i);
System.out.println("name:"+map.get("studentName")+" age:"+map.get("studentAge"));
}
}
}
結果
4 json格式裏嵌套數組
{
"students": [{
"studentName": "lily",
"studentAge": 12
}, {
"studentName": "lucy",
"studentAge": 15
}],
"class": "02",
"school": "希望小學"
}
測試
package com.maltose.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.Map;
/**
* @author sgw
* @DATE 20200625
*/
public class FastJsonTest {
public static void main(String[] args) {
String jsonData = "{\n" +
"\t\"students\": [{\n" +
"\t\t\"studentName\": \"lily\",\n" +
"\t\t\"studentAge\": 12\n" +
"\t}, {\n" +
"\t\t\"studentName\": \"lucy\",\n" +
"\t\t\"studentAge\": 15\n" +
"\t}],\n" +
"\t\"class\": \"02\",\n" +
"\t\"school\": \"希望小學\"\n" +
"}";
Object jsonObject = JSONObject.parse(jsonData);
Map map = (Map) JSONObject.parse(jsonData);
//ArrayList students=(ArrayList)map.get("students");
System.out.println("學校:" + map.get("school"));
System.out.println("班級:" + map.get("class"));
//將students屬性值轉換爲json格式
String students = JSONObject.toJSONString(map.get("students"));
//轉換爲json數組
JSONArray jsonArray = JSON.parseArray(students);
for (int i = 0; i < jsonArray.size(); i++) {
Map student = (Map) jsonArray.get(i);
System.out.println("name:" + student.get("studentName") + " age:" + student.get("studentAge"));
}
}
}
結果