当前位置: 首页 > news >正文

JavaJSON处理工具类JSONUtils

JavaJSON处理工具类JSONUtils

摘要

  • 本工具类基于阿里巴巴的 Fastjson 包,需先在 Maven 的 pom.xml 加上依赖

  • <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
    </dependency>
    
  • 后在 Java 中引入包

  • import com.alibaba.fastjson.*
    
  • astjson 中 JSON 对象(JSONObj,相当于 List<Object>)的常用方法

  • JSON 键值对添加

    • put(String key, Object value):添加键值对 key 和 value
  • JSON 键对应的值获取

    • getBoolean(String key):根据键 key 获取 Boolean 类型的值
    • getInteger(String key):根据键 key 获取 Integer 类型的值
    • getFloat(String key):根据键 key 获取 Float 类型的值
    • getDouble(String key):根据键 key 获取 Double 类型的值
    • getLong(String key):根据键 key 获取 Long 类型的值
    • getByte(String key):根据键 key 获取 Byte 类型的值
    • getString(String key):根据键 key 获取 String 类型的值
    • getJSONObject(String key):根据键 key 获取值为 JSON 对象
    • getJSONArray(String key):根据键 key 获取值为 JSON 数组
  • Fastjson 中 JSON 数组(JSONArray,相当于 Map<String, Object>)的常用方法

  • JSON 对象添加与获取

    • add(JSONObject jsonObj):将 JSON 对象 jsonObj 添加进 JSON 数组
    • getJSONObject(int index):获取指定下标 index 对应的 JSON 对象
  • 以上方法笔者觉得没有必要再封装进工具类了,直接调用就行

  • 而其他的处理可以参考笔者的 JSON 处理工具类 JsonUtils 的以下方法

  • JSON 格式转化

    • strToJSONObj():JSON 字符串转 JSON 对象
    • strToJSONArr():JSON 字符串转 JSON 数组
    • strToObj():JSON 字符串转 Java 对象
    • strToList():JSON 字符串转列表JSONObjToStr():JSON 对象转 JSON 字符串
    • JSONObjToObj():JSON 对象转 Java 对象
    • JSONArrToStr():JSON 数组转 JSON 字符串
    • JSONArrToList():JSON 数组转列表
    • objToStr():Java 对象转 JSON 字符串
    • objToJSONObj():Java 对象转 JSON 对象
    • listToJSONArr():列表转 JSON 数组
  • JSON 输入/输出

    • readJSONFile():从本地 JSON 文件读取出 JSON 字符串

    • generateMockJSON():生成含有的随机值 JSON 对象

    • outputJSONObj():读取并输出 JSON 对象的键值对(不含嵌套)

    • import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONArray;
      import com.alibaba.fastjson.JSONObject;import java.io.*;
      import java.util.List;
      import java.util.Map;
      import java.util.Random;public class JSONUtils {// JSON 对象对应的字符串是用大括号 {} 包裹起来的,如 {"code":"200","msg":"success","data":null}// JSON 数组对应的字符串是用方括号 [] 包裹起来的,如 [{"x":"1","y":"2"},{"x":"3","y":"4"}]// JSON 字符串转 JSON 对象public static JSONObject strToJSONObj(String jsonStr){return JSON.parseObject(jsonStr);}// JSON 字符串转 JSON 数组public static JSONArray strToJSONArr(String jsonStr){return JSON.parseArray(jsonStr);}// JSON 字符串转 Java 对象public static <T> T strToObj(String jsonStr, Class<T> clazz){return JSON.parseObject(jsonStr, clazz);}// JSON 字符串转列表public static <T> List<T> strToList(String jsonStr, Class<T> clazz){return JSON.parseArray(jsonStr, clazz);}// JSON 对象转 JSON 字符串public static String JSONObjToStr(JSONObject obj){return JSON.toJSONString(obj);}// JSON 对象转 Java 对象public static <T> T JSONObjToObj(JSONObject jsonObj, Class<T> clazz){if(jsonObj == null) return null;else return jsonObj.toJavaObject(clazz);}// JSON 数组转 JSON 字符串public static String JSONArrToStr(JSONArray jsonArr){return JSON.toJSONString(jsonArr);}// JSON 数组转列表public static <T> List<T> JSONArrToList(JSONArray jsonArr, Class<T> clazz){if(jsonArr == null) return null;else return jsonArr.toJavaList(clazz);}// Java 对象转 JSON 字符串public static String objToStr(Object obj){return JSON.toJSONString(obj);}// Java 对象转 JSON 对象public static JSONObject objToJSONObj(Object obj){return (JSONObject) JSON.toJSON(obj);}// 列表转 JSON 数组public static JSONArray listToJSONArr(List list){return JSONArray.parseArray(JSON.toJSONString(list));}// 从 JSON 文件读取出 JSON 对象public static JSONObject readJSONFile(String filename) {// filename 是包括路径的文件名String jsonStr = "";File jsonFile = new File(filename);try {FileReader fileReader = new FileReader(jsonFile);Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");int ch = 0;StringBuffer stringBuffer = new StringBuffer();while ((ch = reader.read()) != -1){stringBuffer.append((char) ch);}fileReader.close();reader.close();jsonStr = stringBuffer.toString();} catch (FileNotFoundException e){return null;} catch (IOException e) {e.printStackTrace();}return JSON.parseObject(jsonStr);}// 读取并输出 JSON 对象的键值对(含嵌套)public static void printJSONObj(JSONObject jsonObj) {if (jsonObj != null) {for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {String key = entry.getKey();Object value = entry.getValue();if (value instanceof JSONObject) {// 嵌套对象System.out.println(key + " = {");printJSONObj((JSONObject) value);System.out.println("}");} else {// 非嵌套对象System.out.println(key + " = " + value.toString());}}}}// 生成含有的随机值 JSON 对象public static JSONObject generateMockJSON(List<String> keys, Integer length) {// keys 是 JSON 中的键名,length 是每个键的随机生成值的长度// 调用示例如 generateMockJSON(Arrays.asList(new String[]{"id", "key1","key2"}),16)// baseStr 中每个字符是随机生成字符串中每个字符可能的取值String baseStr ="ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";JSONObject jsonObj = new JSONObject();// 由 Random 生成随机数Random random = new Random();for (String key : keys) {StringBuffer buffer = new StringBuffer();for(int i = 0; i < length; i++){int number = random.nextInt(baseStr.length());buffer.append(baseStr.charAt(number));}jsonObj.put(key, buffer.toString());}return jsonObj;}// 将 JSON 对象写入文件public static void writeJSONFile(JSONObject jsonObject, String fileName) {try (FileWriter file = new FileWriter(fileName)) {file.write(jsonObject.toString());} catch (IOException e) {System.out.println(e.getMessage());}}}
      

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python-字符串排序(赛氪OJ)
  • 视频转音频mp3软件有哪些?分享好用的转换工具
  • docker具体操作
  • 一把手告诉你联盟营销白帽电商广告借力NewsBreak头条优势
  • 队列相关内容
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10结合全新多尺度线性注意力机制DSLAM和C2f_DSLAM(全网独家创新)
  • 安卓中synchronized 关键字 的作用和介绍
  • java 使用zookeeper包实现zookeeper分布式锁
  • [mongodb][配置]MongoDB中限制内存
  • Docker方式部署K8s集群
  • bash代码片段snippets
  • Oracle使用手册
  • 爆改YOLOv8|使用MobileNetV3替换Backbone
  • leetcode 169 多数元素
  • 如何用AP525 测试输入信号的相位,频响,延时,Pop和卡顿
  • php的引用
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • git 常用命令
  • github指令
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js作用域和this的理解
  • Lucene解析 - 基本概念
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 笨办法学C 练习34:动态数组
  • 程序员该如何有效的找工作?
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 终端用户监控:真实用户监控还是模拟监控?
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 国内开源镜像站点
  • 回归生活:清理微信公众号
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (js)循环条件满足时终止循环
  • (层次遍历)104. 二叉树的最大深度
  • (二) 初入MySQL 【数据库管理】
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)WLAN定义和基本架构转
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET面试题(二)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .sh 的运行
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @font-face 用字体画图标
  • @GetMapping和@RequestMapping的区别
  • @取消转义
  • [14]内置对象
  • [20150321]索引空块的问题.txt
  • [20161214]如何确定dbid.txt
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作