实习初期,开始接触到系统的后台日志查询展示到前台,后台将查询到的数据转化成json格式返回前台,发现系统使用的是阿里的fastjson,于是想来了解一下fastjson的使用。
以下使用都是基于这个版本:
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对象的区别
此文主要是使用java来进行转换,在jsp页面使用js/jq进行转换,也特地百度找了一篇好文可以学习:json字符串、json对象、数组之间的转换
一、简单对象与json之间转换:
简单对象:
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.简单对象转json:
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 }
运行结果:
2、json转简单对象:
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 }
二、list对象与json之间转换
1、list对象转jsonArray:
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.
运行结果:
2、json字符串转list:
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 }
运行结果:
三、map与json之间转换
1、map转json:
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 }
运行结果:
2、json转map
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 }