首页 > 编程语言 >后端 Java 对象转 json(不用第三方依赖的拼接方式)

后端 Java 对象转 json(不用第三方依赖的拼接方式)

时间:2023-12-03 20:55:51浏览次数:47  
标签:Java String get builder oilProdDaily json 拼接 mouth append

  • 需求:编写工具类要尽可能不用任意一个 jar 包依赖,或者尽可能精简

  • 原有数据:

    ArpsParams{actualProduction=[{mouth=2022-07, oilProdDaily=366088.33}, {mouth=2022-08, oilProdDaily=380806.78}], 
    predictionSegment=[{mouth=2022-07, oilProdDaily=367832.31}, {mouth=2022-08, oilProdDaily=368310.88}], 
    predictionProduction=[{mouth=2023-10, oilProdDaily=374462.45}, {mouth=2023-11, oilProdDaily=374949.65}, {mouth=2023-12, oilProdDaily=375437.49}, {mouth=2024-01, oilProdDaily=375925.96}, {mouth=2024-02, oilProdDaily=376415.07}], 
    methodName='指数递减', formula='Q=367354.35*e^(--0.001*t)'}
    
  • 现有要求转换成 JSON 形式显示:

    {
      "actualProduction": [
        {
          "mouth": "2022-07",
          "oilProdDaily": 366088.33
        },
        {
          "mouth": "2022-08",
          "oilProdDaily": 380806.78
        }
      ],
      "predictionSegment": [
        {
          "mouth": "2022-07",
          "oilProdDaily": 367832.31
        },
        {
          "mouth": "2022-08",
          "oilProdDaily": 368310.88
        }
      ],
      "predictionProduction": [
        {
          "mouth": "2023-10",
          "oilProdDaily": 374462.45
        },
        {
          "mouth": "2023-11",
          "oilProdDaily": 374949.65
        },
        {
          "mouth": "2023-12",
          "oilProdDaily": 375437.49
        },
        {
          "mouth": "2024-01",
          "oilProdDaily": 375925.96
        },
        {
          "mouth": "2024-02",
          "oilProdDaily": 376415.07
        }
      ],
      "methodName": "指数递减",
      "formula": "Q=367354.35*e^(--0.001*t)"
    }
    
  • 方法一:引入第三方依赖,如 jackson-databind,然后使用:

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    ObjectMapper objectMapper = new ObjectMapper();
    String arpsParamsJson = objectMapper.writeValueAsString(arpsParams);
    System.out.println(arpsParamsJson); // JSON样式
    
  • 方法二:拼接,推荐使用 StringBuilder builder = new StringBuilder();

    //        开始拼接:
    StringBuilder builder = new StringBuilder("{");
    //        实际数据 actualProduction:
    List<Map<String, Object>> actual = arpsParams.getActualProduction();
    builder.append("\"actualProduction\": [");
    for (int i = 0; i < actual.size(); i++){
        // 获取 mouth 和 oilProdDaily 的值
        String mouth = (String) actual.get(i).get("mouth");
        Double oilProdDaily = (Double) actual.get(i).get("oilProdDaily");
        builder.append("{\"mouth\": \"" + mouth + "\",");
        builder.append("\"oilProdDaily\": " + oilProdDaily + "},");
    }
    int lastCommaIndex1 = builder.lastIndexOf(",");
    if (lastCommaIndex1 != -1) {
        // 删除最后一个逗号
        builder.deleteCharAt(lastCommaIndex1);
    }
    builder.append("],");
    
    //        拟合数据 predictionSegment:
    List<Map<String, Object>> segment = arpsParams.getPredictionSegment();
    builder.append("\"predictionSegment\": [");
    for (int i = 0; i < segment.size(); i++){
        // 获取 mouth 和 oilProdDaily 的值
        String mouth = (String) segment.get(i).get("mouth");
        Double oilProdDaily = (Double) segment.get(i).get("oilProdDaily");
        builder.append("{\"mouth\": \"" + mouth + "\",");
        builder.append("\"oilProdDaily\": " + oilProdDaily + "},");
    }
    int lastCommaIndex2 = builder.lastIndexOf(",");
    if (lastCommaIndex2 != -1) {
        builder.deleteCharAt(lastCommaIndex2);
    }
    builder.append("],");
    
    //        预测数据 predictionProduction:
    List<Map<String, Object>> production = arpsParams.getPredictionProduction();
    builder.append("\"predictionProduction\": [");
    for (int i = 0; i < production.size(); i++){
        // 获取 mouth 和 oilProdDaily 的值
        String mouth = (String) production.get(i).get("mouth");
        Double oilProdDaily = (Double) production.get(i).get("oilProdDaily");
        builder.append("{\"mouth\": \"" + mouth + "\",");
        builder.append("\"oilProdDaily\": " + oilProdDaily + "},");
    }
    int lastCommaIndex3 = builder.lastIndexOf(",");
    if (lastCommaIndex3 != -1) {
        builder.deleteCharAt(lastCommaIndex3);
    }
    builder.append("],");
    
    //        模型类型和表达式:
    String methodName = arpsParams.getMethodName();
    String formula = arpsParams.getFormula();
    builder.append("\"methodName\": \"" + methodName + "\",\"formula\": \"" + formula + "\"}");
    
    //        以JSON形式输出显示
    System.out.println(builder);
    

标签:Java,String,get,builder,oilProdDaily,json,拼接,mouth,append
From: https://www.cnblogs.com/zhu-ya-zhu/p/17873748.html

相关文章

  • Java学习笔记——数据库
    数据库的基本概念数据库和数据库管理系统(DBMS):数据库是一个组织数据的集合,可以通过一定的结构和规则进行管理和访问。数据库管理系统(DBMS)则是用于管理和操作数据库的软件。关系型数据库管理系统(RDBMS):关系型数据库以表格的形式存储数据,其中行被称为记录,列被称为字......
  • Java泛型:类型参数化的优雅解决方案
    一、引言Java泛型是Java语言的一重要特性,它提供了一种在编译时进行类型检查的方式,使得代码更加类型安全。本文将深入探讨Java泛型的概念、用法及其重要性。二、Java范型简介Java范型,也称为泛型,是一种在Java编程语言中处理类型的方法。它允许程序员在类、接口和方法中使用类型参数。......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • Java线程安全问题
    一、共享资源共享资源是指,同时会有多个线程访问的资源。二、线程安全问题线程安全问题是指多个线程同时读写共享资源时并且没有任何同步措施的情况下,出现脏数据或者其他不可预见的结果的问题。当然如果所有线程都只是读取共享资源而不去修改共享资源是不会出现线程安全问题的。......
  • Java应用导致CPU使用率过高的排查方法
    1、搭建CentOS7.9,部署JDK8:2、编写测试代码Test.java:publicclassTest{publicstaticvoidmain(String[]args){System.out.println("测试死循环对CPU的影响");while(true){}}}3、编译Test.java:#javacTest.java4、运行Test程序:#jav......
  • Linux配置Java环境变量(详细步骤总结
    (目录)前言Java的环境变量的配置应该是每个java开发者使用Linux必备的一个配置,鉴于之前笔者在配置虚拟机或者云服务器的时候,都需要额外从网页上寻找资料,略显得有点麻烦,故在此总结一篇Java环境变量的详细配置步骤总结,希望可以帮助广大开发者们提高自己的效率下载JDK官网下载j......
  • java.net.ConnectException: Connection timed out: connectjava.net.连接异常:连接超
    因为我有steam++加速器,但这个加速器会清空你的hosts文件,往常出现java.net.ConnectException:Connectiontimedout:connectjava.net.连接异常:连接超时:连接这个问题的时候一般都是hosts文件被清空了。但昨天写作业的时候发现在hosts文件写上ip以后还会报错。这个问题我解决了......
  • Java学习之路(十一)
    Java学习之路(十一)1、常用API1.1、Math(应用)1、Math类概述Math包含执行基本数字运算的方法2、Math中方法的调用方式Math类中无构造方法,但内部的方法都是静态的,则可以通过类名.进行调用3、Math类的常用方法方法名方法名说明publicstaticinta......
  • Java智慧工地一体化解决方案(里程碑管理)源码
    智慧工地为管理人员提供及时、高效、优质的远程管理服务,提升安全管理水平,确保施工安全提高施工质量。实现对人、机、料、法、环的全方位实时监控,变被动“监督”为主动“监控”。一、建设背景施工现场有数量多、分布广,总部统一管理难度大;工地作业流程节点多,缺少过程可视化管理,成本......
  • Java中的死锁问题及其解决方案
    第1章:引言大家好,我是小黑。今天咱们来聊聊Java编程中一个让人头疼的问题——死锁。你可能听说过死锁,或者在编码时不小心遇到过。死锁就像是交通堵塞,在程序的世界里,它会让线程陷入无尽的等待,导致程序无法正常运行。在Java并发编程中,理解死锁并学会如何处理它是非常关键的。接下来,我......