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

简单对象:

  1. public class Person {
  2. private String lastName;
  3. private String gender;
  4. private Integer age;
  5.  
  6. public Person() {
  7. }
  8.    //此处省略getter,setter方法,不然代码太长,影响阅读
  9. @Override
  10. public String toString() {
  11. return "Person{" +
  12. "lastName='" + lastName + '\'' +
  13. ", gender='" + gender + '\'' +
  14. ", age=" + age +
  15. '}';
  16. }
  17. }

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. }

注意:这里是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. }

List<Person> list = JSON.parseArray(jsonStr,Person.class),这里的Person.class是根据泛型决定的。

例如:List<Map<String,Object>>  mapList  = JSON.parseArray(menuJson,Map.class)

运行结果:

三、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. }

fastjson的简单使用的更多相关文章

  1. 高性能JSON框架之FastJson的简单使用

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  2. Android原生json和fastjson的简单使用

    android原生操作json数据 主要是两个类 JSONObject 操作对象     JONSArray操作json数组 对象转json //创建学生对象 Student student=new ...

  3. FastJson的简单实用

    一.FastJson的理解 在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON ...

  4. fastjson 的简单说明及使用

    fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发. 各个版本jar包下载地址:https://repo1.maven.org/maven2/ ...

  5. FastJson的简单使用(alibaba)

    原文章:http://blog.csdn.net/glarystar/article/details/6654494 原作者:张星的博客 maven配置: <dependency> < ...

  6. Fastjson 的简单使用<转>

    简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...

  7. JSON解析工具——fastjson的简单使用

    从官方文档入手: 常见问题与快速上手:https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 各种使 ...

  8. fastjson过滤器简单记录

    fastjson过滤器,该字段可以将转化的json字段遍历,方便实用 1 /** * 通用输出json * @param object * @return json字符串 */ public Stri ...

  9. fastjson JSONObject简单使用

    工作中用的蛮多的最近整理下,概括地说 通过这个工具可以让一个json在json串,JSONObject,java对象之间进行转化 首先我们先写2个bean来构成一个比较复杂的json串: public ...

随机推荐

  1. c语言的二进制表示的是什么码

    int -1 的二进制是 1111 1111 1111 1111 1111 1111 1111 1111 int -2 的二进制是 1111 1111 1111 1111 1111 1111 1111 ...

  2. 记录C#中的扩展方法

    C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...

  3. springboot后台运行

    nohup java -jar shareniu.jar >out.txt &

  4. 如何把原生小程序项目合并的mpvue项目中

    当时的情景是这样的: 使用mpvue写微信小程序,写着写着项目写到一半了,突然间不想这样继续写了,想切换回原生小程序语法去写剩余部分. 如下图,红色框里的功能是已经用mpvue完成的功能,绿色框部分的 ...

  5. js动态改变setInterval的时间

    <!DOCTYPE html> <html> <head> <!--meta name="viewport" content=" ...

  6. 继承 & 多态 & 封装

    什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Par ...

  7. input type = file 在部分安卓手机上无法调起摄像头和相册

    移动端H5web 用input type = file 在部分安卓手机上无法调起摄像头拍照,有的也无法访问相册而是直接访问了文档,解决办法是: 加上 accept = "image/*&qu ...

  8. JAVA项目中文件重命名方式

    可以直接改类名,之后eclipse会报错: 点击×号会给出解决方案: 注意:不能通过右击servlet文件直接重命名.否则运行之后程序会报错(文件路径不对之类的)

  9. 个人对stm32ADC编程关键点的理解

    平时在做项目或者参加比赛的过程中,个人觉得,有些东西写出来可能会帮助到新手少走弯路.(也很可能是错误的,欢迎大家纠错) 如果只是采集一路信号,直接用ADC独立模式,单通道就可以了. 如果需要同时采集多 ...

  10. GAITC 2019全球人工智能技术大会(南京)

    2019年5月25日至26日,由中国人工智能学会主办,以“交叉.融合.相生.共赢”为主题的2019GAITC将在南京全新亮相. 2019 全球人工智能技术大会(2019 GAITC)以“前端引领.深度 ...