首页 > 其他分享 >关于JSON转换总结

关于JSON转换总结

时间:2024-03-13 14:24:02浏览次数:34  
标签:总结 转换 JSONArray JSONObject list JSON 数组 id

关于JSON转换总结

前言

JSON 是 JavaScript 数据类型中的一个子集,目前主流的浏览器都使用了通用的 JavaScript 引擎组件,所以在解析 JSON 格式时具有良好的兼容性。这便是 “JavaScript Object Notation”(缩写为 JSON )诞生的由来。

一些常用的JSON解析依赖库有阿里的fastjson和国外的jackjson,以下示例基于fastjson。

结构形式

  1. 认识JSON 数组是[],对象是{}
    JSON对象

    {"id": "229", "power": 79148.74747499419, "power_upper": 91021.0595962433, "power_lower": 67276.43535374505, "date_time": "2024-03-22"}
    

    JSON数组

    ["h","e","l","l","o"]
    

    JSON对象数组

    [{"id": "229", "power": 79148.74747499419, "power_upper": 91021.0595962433, "power_lower": 67276.43535374505, "date_time": "2024-03-22"},
     ...]
    

    这里的data也是一个JSON数组,使用JSONObject的getJSONArray(“data”)方法获取到value值json数组

    {
        "data": {
            "content": [
                {
                    "id": "926160574061371392",
                    "status": "PROGRESSING",
                    "updateContent": "测试一下",
                    "version": "10.6.0",
                    "createTime": "2023-10-31 17:11:28"
                },
                {
                    "id": "926160574061371326",
                    "status": "CANCELED",
                    "updateContent": "测试测试",
                    "version": "123.0",
                    "createTime": "2023-10-31 17:11:28"
                }
            ]
        },
        "code": 200,
        "msg": "成功",
        "success": true
    }
    

JavaBean转JSON

转为JSON格式时,没有值的字段

@Test
public void test01() throws Exception {
    PredictingData predictingData = new PredictingData();
    predictingData.setId("1");
    String jsonObject = JSONObject.toJSONString(predictingData);
    System.out.println(jsonObject); // 输出:{"id":"1"}
    // 没有值的字段没有转
}
// 转JSON字符串
String jsonStr = JSON.toJSONString(javaBean);
String listJson = JSON.toJSONString(list);
String listJson = JSON.toJSONString(list);
// 转JSON数组
JSONArray jsonArray = (JSONArray)JSONArray.toJSON(list);

JSON转JavaBean

    @Test
    public void test() throws Exception {
        List<WeatherForecastData> list = weatherForecastMapper.getWeatherForecastListByYear("2024");
//        JSONArray data = JSONArray.parseArray(JSONObject.toJSONString(list));//结果1
        List<WeatherForecastData> data = JSONArray.parseArray(JSONObject.toJSONString(list), WeatherForecastData.class);//结果2
        System.out.println(data);
    }

数据库查询结果:

image-20240313105119733

结果1:

image-20240313104945360

结果2:

image-20240313104720373

因为有的字段我没有查出来的,比如id没有查,但id有默认值0,所以JSON格式有id字段;比如time字段需要进行处理,没有直接查而是使用中间字段timeMonth转接在业务层做了赋值处理,所以当time为null,不会出现在转换后的JSON格式中

从结果可以看到解析方法的不同,解析成JSONArray时如果JavaBean的某字段没有值,那么就不会出现在转换后的JSON数组字段中;而解析成实体类时会指定对应的JavaBean类类型,没有值的字段会赋字段属性默认值。

这里提一下涉及到JSON传参的注解:

@RequestBody与@RequestParam区别

  • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
  • @RequestBody用于接收json数据【application/json】

后期开发中,发送json格式数据为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数

问题:

远程预测中心对接给我传回预测结果的时候,遇见下列几个问题:

  1. 传回数据是一个数组集合,内容类型是application/x-www-form-urlencoded不支持,需要application/json

  2. 最后使用的@RequestBody注解,传的String类型的字符串参数

    • 先将字符串解析成JSONObject,再将JSONObject的getJSONArray方法解析成JSONArray对象,最后遍历JSON数组转成实体类集合

      @PostMapping("/insertPredictedData")
          public int insertPredictedData(@RequestBody String predictedDataList) {
              JSONObject jsonObject = JSONObject.parseObject(predictedDataList, JSONObject.class);
              JSONArray jsonArray = jsonObject.getJSONArray("predictedDataList");
              ArrayList<PredictedData> list = new ArrayList<>();
              for (Object o : jsonArray) {
                  PredictedData predictedData = JSON.parseObject(o.toString(), PredictedData.class);
                  list.add(predictedData);
              }
              System.out.println("数据条数" + list.size());
              int n = predictedDataMapper.insertPredictedDataHavingId(list);
      
              return SUCCESS;
          }
      // 也可以一步解析成对象集合PredictedData[] students = JSON.parseObject(str2, PredictedData[].class);
      

标签:总结,转换,JSONArray,JSONObject,list,JSON,数组,id
From: https://www.cnblogs.com/code-jia/p/18070541

相关文章

  • JSON序列化之旅:深入理解.NET中的JsonResult与自定义ContractResolver
    在.NET开发的世界里,JSON已成为一种无处不在的数据交换格式。无论是WebAPI还是微服务架构,我们都经常需要将对象序列化成JSON格式,以方便客户端的接收和处理。今天,我想和大家分享一段关于.NET中JsonResult使用的代码,以及它背后的一些细节。这段代码来自于一个典型的ASP.NETCore应......
  • [C++]C++函数指针总结
    指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。先声明几个指针放着做例子:例一:int*......
  • MongoDB学习总结
    一、数据库基础命令1、关于database的基础命令查看所有的数据库:showdbs/showdatabases切换数据库:usedb_name查看当前的数据库:db删除当前的数据库:db.dropDatabase()2、关于集合的基础命令不手动创建集合:向不存在的集合中第一次加入数据时,集合会被创建出来手动创建集合......
  • SpringBoot Controller接收参数的常用方式总结
    原生的HttpServletRequest可和其他注解配合使用,是内置对象,是整个请求可获取到所有的数据请求路径参数@PathVariable请求路径参数例如url/{id},则获取id参数。@PathVariabel(name="xx")@RequestParam例如url?name=xxx。@RequestParam(name="xx")Body参数@Req......
  • 一个月内通过软考高级系统架构设计师,如何复习?进度安排、备考资料买哪些?附22条备考经验
    前言        楼主2022年下半年参加计算机软考,高级系统架构师的考试;复习时间:2个月(在职复习,真正有效时间<1个月);以下是楼主分数情况:综合知识45分;案例分析56分;论文58分。论文和案例均高分通过。    本文分享楼主复习高级系统架构师的考试的经验,备考建议,分享复......
  • (建议收藏)大牛总结的二十二个电源研发问题
    问题一:我们小功率用到最多的反激电源,为什么我们常常选择65K或者100K(这些频率段附近)作为开关频率?有哪些原因制约了?或者哪些情况下我们可以增大开关频率?或者减小开关频率?开关电源为什么常常选择65K或者100K左右范围作为开关频率,有的人会说IC厂家都是生产这样的IC,当然这也有原......
  • 基于FPGA各种视频接口转换的国产化设计
    随着国产化进程推进,现在许多项目需要实现国产化设计,本博主通过器件选型/原理图设计,到视频接口输入,DDR3缓存,再到图像输出,使用者可在此基础实现二次开发,功能实现通过verilog,操作简单,添加功能方便。接口包含lvds/camelink/bt1120/hdmi/sdi等等常用视频接口,也可定制其他接口,带......
  • ChatGPT提问技巧——总结提示
    ChatGPT提问技巧:总结提示摘要提示是一种允许模型生成给定文本的较短版本,同时保留其主要观点和信息的技术。具体做法是将较长的文本作为输入提供给模型,并要求它生成该文本的摘要。这项技术适用于文本摘要和信息压缩等任务。如何与ChatGPT一起使用:输入较长的文本,要求模......
  • go语言接口转换 go语言接口详解
    go语言接口转换go语言接口详解 转载文章标签go语言接口转换Go方法名嵌套文章分类Go语言后端开发阅读数38 一、接口1.1接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-typeprogramming的一种体现。接口做的事情......
  • 全网最详细Docker命令(分类总结)
    默认存储容器地址cd/var/lib/docker容器生命周期Docker命令开启docker:systemctlstartdocker查看docker状态:systemctlstatusdocker停止:systemctlstopdocker重启:systemctlrestartdockerdocker开机自启:systemctlenabledocker镜像拉取镜像docker......