解析JSON格式参数 & 修改对象的key

系列文章目录

Java中运用BigDecimal对字符串的数值进行加减乘除等操作
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)
VUE整合Echarts实现简单的数据可视化
SpringBoot+Vue3实现登录验证码功能

更多该系列文章请查看我的主页哦



前言

根据实际开发需求,需解析JSON格式的参数。修改key的值变换成中文,如“name“:“张三”,就需要修改成“姓名“:“张三”。解决此需求,需分为以下三个步骤:

  1. 解析json参数,解析到要修改的层
  2. 修改key值
  3. 返封装参数。

下面我们就根据上述的步骤完成一个案例。相信这个案例掌握后,对于类似的JSON解析以及修改值对你来说就很简单啦!


一、数据准备

这里我们准备一个JSON串,我这里就按照下面的JSON格式的串来进行案例。
案例要求:修改json串中users对象的key为“name“的改成“姓名”中文。

{
  "status": "success",
  "data": {
    "users": [
      {
        "id": 1,
        "name": "John Doe",
        "age": 30,
        "email": "johndoe@example.com"
      },
      {
        "id": 2,
        "name": "Jane Smith",
        "age": 25,
        "email": "janesmith@example.com"
      }
    ],
    "products": [
      {
        "id": 1001,
        "name": "Product A",
        "price": 19.99
      },
      {
        "id": 1002,
        "name": "Product B",
        "price": 29.99
      }
    ]
  },
  "message": "Data retrieved successfully"
}

这个JSON串虽然结构简单,但设计到的知识点都能够包含进去,对大家来说也比较容易理解。

二、解析json

2.1 知识点补充

解析json,JSONObject.parseObject用来解析json串,解析成对象。同理:获取数组 JSONArray.parseArray(),对象获取值就是get(“key”)。数组获取值(数组里套的是对象)就是getJSONObject(i),获取数组第i个的对象。
可以用map封装,也可以直接转为JSONObject。json数组同理

//理解知识点:获取jsonObject 同理:获取数组 JSONArray.parseArray()
        JSONObject jsonObject = JSONObject.parseObject(strjson);
        System.out.println(jsonObject.get("message"));//Data retrieved successfully

执行结果如下图:因为是第一层,所以获取倒是"message"值为Data retrieved successfully。
在这里插入图片描述

2.2 逐层解析json

根据2.1的知识点补充,想必大家对于json的解析已经是有了一个简单的认识。下面我来逐层解析案例中的json串。结合着案例json串的结构看代码比较好理解哦!
注意:大家在自己解析时,根据自己的json串结构进行解析。
解释代码:因为我们要改的users这层在data对象下,找到users数组。所以我们需要3步:

  1. 解析data对象,所以使用JSON.parseObject
  2. 解析数组,所以用JSONArray.parseArray
  3. 循环数组,解析数组里的每一个对象。
		//解析json
        JSONObject jsonMap = JSON.parseObject(jsonObject);
        String strData = String.valueOf(jsonMap.get("data"));
        //解析result下的json
        JSONObject jsonDataMap = JSON.parseObject(strData);
        JSONArray usersArray = JSONArray.parseArray(jsonDataMap.getString("users"));
        int size = usersArray.size();
        //为空则不需要处理
        if(usersArray != null){
            //开始解析
            for(int i=0;i<size;i++){
                //拿到每一个需要改的对象 将name的key 改成中文“姓名”
                JSONObject userMap = usersArray.getJSONObject(i);
                
            }

        }

三、修改key值

获取到每个对象后,我们开始修改每个对象的key。

这里我们使用“移除“和“增加“方法来实现修改

下述代码分为三步骤,分别为:

  1. 保存原来的value值。
  2. 移除原来的键值对。
  3. 新增一个键值对,key为“姓名”中文,value是保存的原有值。
		Object name = userMap.get("name");
       //先移除 再添加 移除前记得先获取value
        userMap.remove("name");
        userMap.put("姓名",name);

四、返封装参数

我们在改完之后,需要封装回去。这样才能改变总json串的值。所以我们需从内到外层一步一步封装回去。
注:每一步封装都需要删除原来的,设置成新的(修改后的)
如下图所示:从内-外层进行封装。
在这里插入图片描述

五、效果图展示

通过修改前、后的对比可以发现,已经实现了修改key值。如下图所示:
在这里插入图片描述

六、全部代码

我将该例子的解析代码写到了方法里,将案例的json串传到方法中即可进行解析。
代码如下:

public static String parseJson(String jsonObject) {
        //解析json
        JSONObject jsonMap = JSON.parseObject(jsonObject);
        String strData = String.valueOf(jsonMap.get("data"));
        //解析result下的json
        JSONObject jsonDataMap = JSON.parseObject(strData);
//        System.out.println(jsonDataMap);
        JSONArray usersArray = JSONArray.parseArray(jsonDataMap.getString("users"));
        int size = usersArray.size();
        //为空则不需要处理
        if(usersArray != null){
            //开始解析
            for(int i=0;i<size;i++){
                //拿到每一个需要改的对象 将name的key 改成中文“姓名”
                JSONObject userMap = usersArray.getJSONObject(i);
                Object name = userMap.get("name");
                //先移除 再添加 移除前记得先获取value
                userMap.remove("name");
                userMap.put("姓名",name);

                //设置回去
                usersArray.set(i,userMap);
            }

        }
        //将userArray设置回去
        jsonDataMap.remove("users");
        jsonDataMap.put("users",usersArray);

        //设置给最外层
        jsonMap.put("data",jsonDataMap);
        return jsonMap.toJSONString();
    }

总结

到此案例的实现就算完成了,当然在实际项目需求中解析的内容也要相对而言复杂些(层数多些)。但原理就是通过一层一层解析后进行修改,然后一层一层的封装回去。所以只要大家学会了这个内容,理解每一行代码的含义,相信在以后遇到更加复杂的json串也是可以轻松解决的。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态还需努力呀

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值