教你怎么编写高效的JSON工具类

作者:疾风丶Sao年 链接: https://blog.csdn.net/lkp_kapila/article/details/78153848

在开发过程中,极有可能会用到JSON数据的传输。这不,笔者在前段时间的开发过程中在http请求后台数据时就用到了JSON与对象和集合之间的转换。在JSON数据组装的过程中,你还在怕一个个字符串拼接出错而烦恼吗?在这里笔者整理了一个完整的工具类,能够帮助大家快速而高效的开发,妈妈再也不用担心我在这一块出错了。

package com.beichende.ibank.util;
 
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
/**
 * Description:GSON单例类,提供对象到JSON数据格式转换
 *
 * @author gujc
 */
public class JsonUtil {
    private static Gson gson = null;
 
    private JsonUtil() {
    }
 
    private static Gson gson() {
        if (gson == null) {
            synchronized (JsonUtil.class) {
                if (gson == null) {
                    gson = new Gson();
                }
            }
        }
        return gson;
    }
 
    /**
     * 目标对象到JSON数据格式转换
     *
     * @param src 目标对象
     */
    public static String toJson(Object src) {
        return gson().toJson(src);
    }
 
    /**
     * JSON格式数据到目标对象转换
     *
     * @param js    JSON格式数据
     * @param clazz 目标对象類型
     * @return 目标对象
     * @throws "JsonConvertException"
     */
    public static <T> T fromJson(String js, Class<T> clazz) {
        return gson().fromJson(js, clazz);
    }
 
    public static <T> List<T> getObjectList(String jsonString,Class<T> cls){
        List<T> list = new ArrayList<T>();
        try {
            Gson gson = new Gson();
            JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
            for (JsonElement jsonElement : arry) {
                list.add(gson.fromJson(jsonElement, cls));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    public static <M> List<M> getList(String jsonString,Class<M> cls){
        List<M> list = new ArrayList<M>();
        try {
            Gson gson = new Gson();
            JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
            for (JsonElement jsonElement : arry) {
                list.add(gson.fromJson(jsonElement, cls));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    /**
     * Json 转成 Map<>
     * @param jsonStr
     * @return
     */
    public static Map<String, Object> getMapForJson(String jsonStr){
        JSONObject jsonObject ;
        try {
            jsonObject = new JSONObject(jsonStr);
 
            Iterator<String> keyIter= jsonObject.keys();
            String key;
            Object value ;
            Map<String, Object> valueMap = new HashMap<String, Object>();
            while (keyIter.hasNext()) {
                key = keyIter.next();
                value = jsonObject.get(key);
                valueMap.put(key, value);
            }
            return valueMap;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return null;
    }
    /**
     * Json 转成 List<Map<>>
     * @param jsonStr
     * @return
     */
    public static List<Map<String, Object>> getlistForJson(String jsonStr){
        List<Map<String, Object>> list = null;
        try {
            JSONArray jsonArray = new JSONArray(jsonStr);
            JSONObject jsonObj ;
            list = new ArrayList<Map<String,Object>>();
            for(int i = 0 ; i < jsonArray.length() ; i ++){
                jsonObj = (JSONObject)jsonArray.get(i);
                list.add(getMapForJson(jsonObj.toString()));
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return list;
    }
    public static <T> boolean isEmpty(List<T> sourceList) {
        return (sourceList == null || sourceList.size() == 0);
    }
    /**
     * 输入流转字符串
     * @param is
     * @return
     */
    public  static String convertStreamToString(InputStream is) {
 
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
 
    }
}

这是一个JSON工具类,里面用到的一个工具包就是Gson,这个包里面集成了很多对JSON数据的操作方法,可以让我们很轻松的完成对这一块数据的转换操作。目前阿里巴巴也提供了一个fastjson的包,同样能很方便实现JSON数据转换的的操作,这里就不去过多阐述,有兴趣的可以在网上了解了解。首先我们可以先去网上下载好Gson包,然后复制进项目的lib文件夹下面。加进项目后就可以使用这么一个工具类了。下面就来简单介绍下这个工具类的用法吧!

1.将String数据转换成JSON格式的数据,调用这个方法时我们只要传入一个键值对类型的字符串就能自动转换成你想要的JSON格式的数据,这是不是比你一个一个去组装更方便啊!

2.将JSON格式的数据转换成实体对象,有时在进行前后台数据传输时,我们需要对对象进行操作,这里我们就需要将JSON格式的数据转换成对象。

3.list集合和JSON数组的互转。这里我举一个例子,大家一看便知。

首先创建一个包含list集合属性的实体类和一个list集合属性类型的实体类。

public class Student {
  private String name;
  private String sex;
  private String age;
  private String address;
  
  public Student() {
    
  }
  
  public Student(String name, String sex, String age, String address) {
    super();
    this.name = name;
    this.sex = sex;
    this.age = age;
    this.address = address;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getAge() {
    return age;
  }
  public void setAge(String age) {
    this.age = age;
  }
  public String getAddress() {
    return address;
  }
  public void setAddress(String address) {
    this.address = address;
  }
  
}
public class StudentCount {
  private String count;
  private List<Student> list;
  public String getCount() {
    return count;
  }
  public void setCount(String count) {
    this.count = count;
  }
  public List<Student> getList() {
    return list;
  }
  public void setList(List<Student> list) {
    this.list = list;
  }
  
}

StudentCount类中包含list集合,list集合中的成员为student对象。像这种类型的数据,我们可以通过调用工具类将JSON数组转换成StudengCount对象,转换起来很方便,可以大大减少开发中部必要的麻烦。工具类中还有很多的方法,这里只讲解了常用的三种,有兴趣可以多研究研究。大家可以在实际开发中直接使用到,希望能帮到大家!

本文分享自微信公众号 - 格姗知识圈(geshanzsq)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软测小生

一文彻底理解cookie,session,token【专业版】

1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, ...

9430
来自专栏sktj

python flask web 博客实例 restful api 5

|-flasky |-app/ |-api_1_0 |-init.py |-users.py |-posts.py |-comments.py |...

18360
来自专栏软测小生

fastjson—Map和List对象间的转换

fastjson 是阿里巴巴推出的,一个Java语言编写的高性能JSON 处理器,遵循JSON标准 http://json.org/ ,支持各种JDK 类型。...

75050
来自专栏程序源代码

一套完全开源的微信小程序商场系统

Open-Shop小程序商城,包括:分销(支持三级)、团购(拼多多模式)、秒杀、优惠券、等功能,前后端全部开源。做全网最开源、最稳定、功能做强大的开源小程序商城...

2.5K50
来自专栏三掌柜的技术空间

iOS开发:字符串大小写相互转换的使用,汉字转拼音,字符串类型的判断

在iOS开发过程中,有些时候需要用到这种情况,把获取到的英文字符串转换成想要的大小写类型;还有些时候是需要把获取到的汉字字符串转换成汉语拼音的形式;还有些时候来...

10550
来自专栏猿GG编程

如何基于SpringBoot返回一个json对象

开发过程中,接口是必不可少的,那么提前约定数据格式就成了必不可少的步骤。一般情况下大家都是用json格式来传递数据,今天就用spring boot来实现一下返回...

60720
来自专栏风吹杨柳

Gson 序列化Javabean的时候要注意的地方

如果是php做后台的时候,传回时间一般都用时间戳,不要传回一个string  而是传回一个数字

21330
来自专栏软测小生

如何快速写出Json Schema,校验Json Schema

得到一个Json文件,如何快速的去测试呢? 难道是一个个节点的去验证吗?那显然效率太低了。 一般推荐使用Json Schema(一种Json的数据结构定义)去校...

61330
来自专栏猿GG编程

你的idea插件有哪些?来看看这些吧

idea是开发人员常用的开发工具,而idea上庞大的插件功能更是让人欢喜的不得了。来看下我的idea插件,并推荐几个插件给大家。

14030
来自专栏软测小生

REST Assured Schema验证针对JSON和XML

不熟悉schema验证? 它基本上确保从端点返回的JSON或XML响应与一组规则匹配。 规则在schema中定义。 规则可以是一个数字在一定范围内,或者一个属性...

10950

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励