實習初期,開始接觸到系統的後臺日誌查詢展現到前臺,後臺將查詢到的數據轉化成json格式返回前臺,發現系統使用的是阿里的fastjson,因而想來了解一下fastjson的使用。html
如下使用都是基於這個版本:java
1 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> 2 <dependency> 3 <groupId>com.alibaba</groupId> 4 <artifactId>fastjson</artifactId> 5 <version>1.2.49</version> 6 </dependency>
我在學習以前,對json字符串和json對象是分不清的,特意百度找了一篇好文能夠很好的區分:JSON字符串與JSON對象的區別json
此文主要是使用java來進行轉換,在jsp頁面使用js/jq進行轉換,也特意百度找了一篇好文能夠學習:json字符串、json對象、數組之間的轉換數組
簡單對象:jsp
public class Person { private String lastName; private String gender; private Integer age; public Person() { }
//此處省略getter,setter方法,否則代碼太長,影響閱讀
@Override public String toString() { return "Person{" + "lastName='" + lastName + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } }
1 import com.alibaba.fastjson.JSON; 2 import com.alibaba.fastjson.JSONObject; 3 4 public class JsonUtil { 5 6 public static void main(String[] args){ 7 Person person = new Person(); 8 person.setLastName("張三"); 9 person.setGender("男"); 10 person.setAge(30); 11 12 //簡單對象轉換成json字符串 13 String jsonStr = JSON.toJSONString(person); 14 System.out.println("jsonStr = "+jsonStr); 15 //json字符串轉換成json對象 16 JSONObject jsonObject = JSONObject.parseObject(jsonStr); 17 System.out.println("jsonObject = "+jsonObject.toString()); 18 } 19 20 }
運行結果:ide
1 @Test 2 public void jsonToJavabean(){ 3 String jsonStr = "{ \"lastName\": \"李四\", \"gender\": \"女\", \"age\": 28 }"; 4 Person person = JSON.parseObject(jsonStr,Person.class); 5 System.out.println(person); 6 }
1 public void testListToJson(){ 2 List<Person> list = new ArrayList<>(); 3 Person person1 = new Person("AAA","男",12); 4 Person person2 = new Person("BBB","女",24); 5 Person person3 = new Person("CCC","女",18); 6 Person person4 = new Person("DDD","男",49); 7 list.add(person1); 8 list.add(person2); 9 list.add(person3); 10 list.add(person4); 11 12 String jsonStr = JSON.toJSONString(list); 13 System.out.println(jsonStr); 14 JSONArray jsonArray = JSONArray.parseArray(jsonStr); 15 System.out.println(jsonArray); 16 17 18 }
注意:這裏是JSONArray,不是JSONObject.post
運行結果:學習
1 public void testJsonToList(){ 2 String jsonStr = "[{\"lastName\":\"AAA\",\"gender\":\"男\",\"age\":12},
{\"lastName\":\"BBB\",\"gender\":\"女\",\"age\":24},
{\"lastName\":\"CCC\",\"gender\":\"女\",\"age\":18},
{\"lastName\":\"DDD\",\"gender\":\"男\",\"age\":49}]"; 3 List<Person> list = JSON.parseArray(jsonStr,Person.class); 4 System.out.println(list.get(0)); 5 System.out.println(list.get(1)); 6 System.out.println(list.get(2)); 7 System.out.println(list.get(3)); 8 }
List<Person> list = JSON.parseArray(jsonStr,Person.class),這裏的Person.class是根據泛型決定的。url
例如:List<Map<String,Object>> mapList = JSON.parseArray(menuJson,Map.class)spa
運行結果:
1 public void testMapToJson(){ 2 Map<String,Object> map = new HashMap<>(); 3 map.put("id",1); 4 map.put("name","shenggangfeng"); 5 map.put("age",23); 6 map.put("gender","男"); 7 8 String jsonstr = JSON.toJSONString(map); 9 System.out.println(jsonstr); 10 11 JSONObject jsonObject = JSONObject.parseObject(jsonstr); 12 System.out.println(jsonObject); 13 }
運行結果:
1 public void testJsonToMap(){ 2 String jsonStr = "{ \"id\": 2,\"name\": \"liull\",\"age\": 22,\"gender\": \"女\" }"; 3 Map<String,Object> map = JSON.parseObject(jsonStr,Map.class); 4 System.out.println(map.get("id")); 5 System.out.println(map.get("name")); 6 System.out.println(map.get("age")); 7 System.out.println(map.get("gender")); 8 }
運行結果:
已上轉換方法中用的最多的也就幾個特定的方法:
1.JSON的靜態方法toJSONString(Object object),用於將java對象轉化成json字符串
1 public static String toJSONString(Object object) { 2 return toJSONString(object, emptyFilters, new SerializerFeature[0]); 3 }
2.JSON的靜態方法parseObject(String text,Class<T> clazz),用於將json字符串轉換成java對象
1 public static <T> T parseObject(String text, Class<T> clazz) { 2 return parseObject(text, clazz, new Feature[0]); 3 }
3.JSON的靜態方法parseObject(String text),用於將json字符串轉換成json對象。
1 public static JSONObject parseObject(String text) { 2 Object obj = parse(text); 3 if(obj instanceof JSONObject) { 4 return (JSONObject)obj; 5 } else { 6 try { 7 return (JSONObject)toJSON(obj); 8 } catch (RuntimeException var3) { 9 throw new JSONException("can not cast to JSONObject.", var3); 10 } 11 } 12 }
4.JSON的靜態方法parseArray(String text),用於將json字符串轉換成json數組。
1 public static JSONArray parseArray(String text) { 2 if(text == null) { 3 return null; 4 } else { 5 DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance()); 6 JSONLexer lexer = parser.lexer; 7 JSONArray array; 8 if(lexer.token() == 8) { 9 lexer.nextToken(); 10 array = null; 11 } else if(lexer.token() == 20) { 12 array = null; 13 } else { 14 array = new JSONArray(); 15 parser.parseArray(array); 16 parser.handleResovleTask(array); 17 } 18 19 parser.close(); 20 return array; 21 } 22 }
5.JSON的靜態方法parseArray(String text, Class<T> clazz),用於將json字符串轉換成java數組,其中第二個參數是數組元素的類型。
1 public static <T> List<T> parseArray(String text, Class<T> clazz) { 2 if(text == null) { 3 return null; 4 } else { 5 DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance()); 6 JSONLexer lexer = parser.lexer; 7 int token = lexer.token(); 8 ArrayList list; 9 if(token == 8) { 10 lexer.nextToken(); 11 list = null; 12 } else if(token == 20 && lexer.isBlankInput()) { 13 list = null; 14 } else { 15 list = new ArrayList(); 16 parser.parseArray(clazz, list); 17 parser.handleResovleTask(list); 18 } 19 20 parser.close(); 21 return list; 22 } 23 }