fastjson的简单使用 JSON字符串与JSON对象的区别 json字符串、json对象、数组之间的转换

实习初期,开始接触到系统的后台日志查询展示到前台,后台将查询到的数据转化成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     }

猜你喜欢

转载自www.cnblogs.com/liu-sheng/p/9687192.html
今日推荐