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

HuTool工具使用(JSONUtil+JSONObject+JSONArray)

maven依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version>
</dependency>

HutoolTest.java

package com.xjz;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zhwy.pojo.SurfChnMulMin;
import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;public class HutoolTest {//JSON字符串创建@Testpublic void toJsonStr() {SortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {private static final long serialVersionUID = 1L;{put("attributes", "a");put("b", "b");put("c", "c");}};System.out.println(JSONUtil.toJsonStr(sortedMap));System.out.println(JSONUtil.toJsonPrettyStr(sortedMap));}//Json字符串解析@Testpublic void parseObj() {String html = "{\"name\":\"Something must have been changed since you leave\"}";JSONObject jsonObject = JSONUtil.parseObj(html);System.out.println(jsonObject.getStr("name"));}//XML字符串转换成JSON@Testpublic void parseFormXml() {String s = "<sfzh>123</sfzh><sfz>456</sfz><name>aa</name><gender>1</gender>";JSONObject json = JSONUtil.parseFromXml(s);System.out.println(json.get("sfzh"));System.out.println(json.get("name"));}//Json转换为XML@Testpublic void toXmlStr() {final JSONObject put = JSONUtil.createObj().set("aaa", "您好").set("xjz", "666");System.out.println(JSONUtil.toXmlStr(put));}//JSONObject代表一个JSON中的键值对象,这个对象以大括号包围,每个键值对使用,隔开,键与值使用:隔开,一个JSONObject类似于这样://    {//        "key1":"value1",//        "key2":"value2"//    }//创建@Testpublic void createObj() {JSONObject json1 = JSONUtil.createObj().put("key", "value1").put("key2", "value2");JSONObject json2 = new JSONObject().set("key1", "v1").set("key2", "v2");System.out.println(json1);System.out.println(json2);}//1. Json字符串解析@Testpublic void toStringPretty() {String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\"}";//方法一:使用工具类转换JSONObject jsonObject = JSONUtil.parseObj(jsonStr);//方法二:new的方式转换JSONObject jsonObject2 = new JSONObject(jsonStr);//JSON对象转字符串(一行)System.out.println(jsonObject2);// 也可以美化一下,即显示出带缩进的JSON:System.out.println(jsonObject2.toStringPretty());}//JavaBean解析@Testpublic void jsonUtilParseObj() {SurfChnMulMin scmm = new SurfChnMulMin();scmm.setStationIdC("A00001");scmm.setStationName("xjz_2002");// false 表示不跳过null值JSONObject json = JSONUtil.parseObj(scmm, false);System.out.println(json);System.out.println(json.toJSONString(5));System.out.println(json.toStringPretty());}//在JSON中,JSONArray代表一个数组,使用中括号包围,每个元素使用逗号隔开。一个JSONArray类似于这样://["value1","value2","value3"]//创建@Testpublic void createJsonArray() {JSONArray array = JSONUtil.createArray();JSONArray array2 = new JSONArray();array.add("value1");array.add("value2");array.add("value3");//转为JsonArray字符串System.out.println(array);}//从Bean列表解析@Testpublic void beanListParse() {SurfChnMulMin scmm = new SurfChnMulMin();scmm.setStationIdC("A00001");scmm.setStationName("xjz_2002");SurfChnMulMin scmm2 = new SurfChnMulMin();scmm2.setStationIdC("A00001");scmm2.setStationName("xjz_2002");ArrayList<SurfChnMulMin> list = CollUtil.newArrayList(scmm, scmm2);//        JSONArray jsonArray = JSONUtil.parseArray(list);JSONArray jsonArray = new JSONArray(list);System.out.println(jsonArray.getJSONObject(0).getStr("stationName"));}//从JSON字符串解析@Testpublic void toParseArray() {String jsonStr = "[\"value1\", \"value2\", \"value3\"]";JSONArray array = JSONUtil.parseArray(jsonStr);System.out.println("array=" + array);//array=["value1","value2","value3"]}//转换为bean的List@Testpublic void toList() {String jsonArr = "[{\"stationIdC\":111,\"stationName\":\"test1\"},{\"stationIdC\":112,\"stationName\":\"test2\"}]";JSONArray array = JSONUtil.parseArray(jsonArr);System.out.println("array=" + array);//array=[{"id":111,"name":"test1"},{"id":112,"name":"test2"}]List<SurfChnMulMin> userList = JSONUtil.toList(array, SurfChnMulMin.class);// 111System.out.println(userList.get(0).getStationIdC());}//转换为Dict的List@Testpublic void parseDictList() {String jsonArr = "[{\"id\":111,\"name\":\"test1\"},{\"id\":112,\"name\":\"test2\"}]";JSONArray array = JSONUtil.parseArray(jsonArr);List<Dict> list = JSONUtil.toList(array, Dict.class);// 111System.out.println(list.get(0).getInt("id"));}//转换为数组@Testpublic void parseArray() {String jsonArr = "[{\"stationIdC\":111,\"stationName\":\"test1\"},{\"stationIdC\":112,\"stationName\":\"test2\"}]";JSONArray array = JSONUtil.parseArray(jsonArr);SurfChnMulMin[] list = array.toArray(new SurfChnMulMin[0]);}//Json路径@Testpublic void getByPath() {String jsonStr = "[{\"id\": \"1\",\"name\": \"a\"},{\"id\": \"2\",\"name\": \"b\"}]";final JSONArray jsonArray = JSONUtil.parseArray(jsonStr);// bSystem.out.println(jsonArray.getByPath("[1].name"));}}

HuTool 中文文档:https://doc.hutool.cn/pages/json/

相关文章:

  • 3593 蓝桥杯 查找最大元素 简单
  • Leetcode—42. 接雨水【困难】
  • 项目02《游戏-08-开发》Unity3D
  • HarmonyOS鸿蒙ArkTS证件照生成模板(适合二次开发,全套源码版)
  • 面试复盘6——后端开发
  • 进程控制(Linux)
  • 【蓝桥杯冲冲冲】[NOIP2003 普及组] 栈
  • C++ 语法文件
  • 【Golang】exec.command命令日志输出示例
  • Linux常见面试题汇总
  • Java学习七、类和对象
  • AJAX-URL查询参数
  • 【机器学习】基于K-近邻的车牌号识别
  • spring boot bean的生命周期
  • 【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)
  • JS 中的深拷贝与浅拷贝
  • 《剑指offer》分解让复杂问题更简单
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Android优雅地处理按钮重复点击
  • CSS实用技巧
  • es的写入过程
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Idea+maven+scala构建包并在spark on yarn 运行
  • interface和setter,getter
  • laravel with 查询列表限制条数
  • nodejs调试方法
  • Python 基础起步 (十) 什么叫函数?
  • React Transition Group -- Transition 组件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 解决iview多表头动态更改列元素发生的错误
  • 力扣(LeetCode)965
  • 你真的知道 == 和 equals 的区别吗?
  • 硬币翻转问题,区间操作
  • 从如何停掉 Promise 链说起
  • # 数论-逆元
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (k8s中)docker netty OOM问题记录
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)基于IDEA的JAVA基础10
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net开发引用程序集提示没有强名称的解决办法
  • .project文件
  • /boot 内存空间不够
  • :=
  • @Bean注解详解
  • @SentinelResource详解
  • @staticmethod和@classmethod的作用与区别
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [AIGC] Kong:一个强大的 API 网关和服务平台