近期因为需要处理50多个不同结构的数据进行标准化处理,想到做如此多的实体,浪费生命,所以就开始启用模板配置方法,然后基于这个思路,调研了些是否有轮子,结果发现这篇文章,
https://blog.csdn.net/qq_39750658/article/details/83411897
,思路不错,但是就像该文章下面的评论提到的,如果不同层级的key同名要换成各自的name,会出现问题,所以进行了改造。
特殊说明:
以下case仅仅是为了证明此工具类具备的功能,不代表实际数据
处理目标:
将第二层的name处理成xingming,将第三层的name和game统一处理成hobbyname
原始数据:
"user": {
"name": "张三",
"sex": "男",
"hobby": [
"name": "足球",
"desc": "任性"
"game": "英雄联盟",
"desc": "就是这么任性"
目标结果:
"user": {
"sex": "男",
"xingming": "张三",
"hobby": [
"hobbyname": "足球",
"desc": "任性"
"hobbyname": "英雄联盟",
"desc": "就是这么任性"
然后具体怎么实现的,请阅读下面的配置和相应的代码片段
json映射:
'_next': {
'name': 'xingming',
'_next': {
'name': 'hobbyname',
'game': 'hobbyname'
处理代码:
import java.util.Set;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
* 基于json配置文件对json数据key进行替换
* 若每一层需要不同的映射,必须严格按照json层级进行配置
* 若每一层都使用当前层同一套配置,只需要配置到当前层即可
public class JSONUtil {
public static JSONObject changeJsonObj(JSONObject jsonObj,JSONObject keyMap) {
JSONObject resJson = new JSONObject();
Set<String> keySet = jsonObj.keySet();
for (String key : keySet) {
String resKey = keyMap.get(key) == null ? key : keyMap.getString(key);
try {
JSONObject jsonobj1 = jsonObj.getJSONObject(key);
JSONObject keyMapNext = keyMap.getJSONObject("_next") == null ? keyMap : keyMap.getJSONObject("_next");
resJson.put(resKey, changeJsonObj(jsonobj1, keyMapNext));
} catch (Exception e) {
try {
JSONArray jsonArr = jsonObj.getJSONArray(key);
JSONObject keyMapNext = keyMap.getJSONObject("_next") == null ? keyMap : keyMap.getJSONObject("_next");
resJson.put(resKey, changeJsonArr(jsonArr, keyMapNext));
} catch (Exception x) {
resJson.put(resKey, jsonObj.get(key));
return resJson;
public static JSONArray changeJsonArr(JSONArray jsonArr,JSONObject keyMap) {
JSONArray resJson = new JSONArray();
for (int i = 0; i < jsonArr.size(); i++) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
resJson.add(changeJsonObj(jsonObj, keyMap));
return resJson;
public static void main(String[] args) {
String jsonStr = "{\"user\":{\"name\":\"张三\",\"sex\":\"男\",\"hobby\":[{\"name\":\"足球\",\"desc\":\"任性\"},{\"game\":\"英雄联盟\",\"desc\":\"就是这么任性\"}]}}";
//使用json作为映射关系的配置
String jsonKeyMap = "{'_next':{'name':'xingming','_next':{'name':'hobbyname','game':'hobbyname'}}}";
JSONObject jsonKeyObject = JSONObject.parseObject(jsonKeyMap);
JSONObject jsonObj = JSONUtil.changeJsonObj(JSONObject.parseObject(jsonStr),jsonKeyObject);
System.out.println("换值结果 》》 " + jsonObj.toString());
var tree = [{
"PositionGuid": "f5af03a9-968c-46b1-8b5d-17d8a64be22d",
"TemplateGuid": "e5d53c43-a77b-419d-8b49-4d32deff14fd",
"DevNameID": "0010d1d6-2fc1-471c-a82a-3ddb5248de2b",
"Dev...
根据实际开发需求,需解析
JSON
格式的参数。修改
key
的值变换成中文,如“name“:"张三",就需要修改成“姓名“:“张三”。解决此需求,需分为以下三个步骤:
1. 解析
json
参数,解析到要修改的层
2. 修改
key
值
3. 返封装参数。
下面我们就根据上述的步骤完成一个案例。相信这个案例掌握后,对于类似的
JSON
解析以及修改值对你来说就很简单啦!
通过递归遍历
JSON
结构,根据传入的 Map 动态地
替换
多个键值对。这个方法对处理复杂的嵌套
JSON
数据
结构非常有效,并且可以灵活地扩展以处理更多复杂的修改需求。
输出结果: 可以看到直接输出
key
也是自定义的,但这里用的是alibaba.fast
json
注解完成的,和上面使用场景不一样,因为springboot使用fast
json
序列化对象。在springboot请求接口返回对象得到的结果:(因为springboot使用fast
json
序列化对象)实体类属性上增加@
JSON
Field(name = “属性名”)注解(alibaba.fast
json
)实体类的属性上面增加@
Json
Property(“字段名”)注解(fast
json
)
public String update
Json
(String str, String update
Key
, String newValue) {
JSON
Object
json
=
JSON
Object.parseObject(str);
Set<String>
key
Set =
json
.
key
Set();
for (String
key
:
key
Set) {
Object obj =
json
.get(
key
);
JSON
Model是
json
转model的第三方开源库。当我们向服务器发送一个请求之后,通过
JSON
Model把
数据
转成model中的属性就可以很方便的供给我们使用了。
springboot中@Result注解设置字段及实体属性
映射
关系,当字段类型为
JSON
Object和
JSON
Array时设置
映射
关系
JSON
格式表字段
映射
:
@Result(column = "alarm_rule", property = "alarmRule", jdbcType = JdbcType.OTHER, typeHandler = com.geespace.microservices.data.metrics.config.server.dao.MySql
Json
Han.
JSON
结构
转换
指的是将一个
JSON
对象或
JSON
数组按照一定规则
进行
重组、筛选、
映射
或
转换
,生成新的
JSON
对象或数组的过程。这种
转换
可以包括改变
JSON
数据
的结构、提取特定字段、合并多个
JSON
数据
,或者对
数据
进行
计算和处理等操作。通过结构
转换
,可以根据需求定制化地处理
JSON
数据
,使其符合特定的业务逻辑或
数据
格式要求。为了让使用者更加方便的
配置
出
映射
关系,为此开发了一套在线
转换
工具,可在工具中通过拖拽即可
配置
想要的结构
转换
关系,并可对
转换
关系所能实现的效果实时
进行
预览更改。
数据
交换-
JSON
JSON
介绍
JSON
使用
JSON
转字符串字符串转
JSON
JSON
与字符串互相
转换
细节
JSON
在
Java
中的使用
Java
对象与
JSON
字符串互相
转换
List对象与
JSON
字符串
转换
Map对象与
JSON
字符串
转换
JSON
介绍
JSON
指的是
Java
Script对象表示法(
Java
Script Object Notation)
JSON
是轻量级的文本
数据
交换格式
JSON
独立于语言【即
java
. php、asp.net等都可以使用
JSON
]
JSON
具有自我描述性,更易理解