字符串中取出相应字段数据并写入数据库

本人恶补学习中,最近接手springboot项目,临近结尾时候有一个字符串转化成相应字段的数据储存数据库中,这个字符串中有三种字段,对应三种数据,并且这一个字符串是三行数据。(后面写数据库对应字段)抠了很久还没有写进去,就差这几行代码,实在不知道,请问哪位可否给我解惑?
代码如下

img

红框部分是我接收进来的字符串,具体如下
"{"questionId":aa1b66f7920c415cb878a52e6810116e,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":B;
"questionId":aa1b66f7920c415cb878a52e6810116e,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":C;
"questionId":409599c32b7346aea21d8d11a7a65cae,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":A;}"

之后进行了去掉斜线;

img

如图,红框部分是去掉之后的,字符串代码如下
"{"questionId":aa1b66f7920c415cb878a52e6810116e,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":B;
"questionId":aa1b66f7920c415cb878a52e6810116e,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":C;
"questionId":409599c32b7346aea21d8d11a7a65cae,"questionnaireId":ae48a70f3d084ee693b00a3549f4e687,"answer":A;}"

其中questionId,questionnaireId,answer为字段,后面都是需要写入数据库的数据,(这是一个选择题答案保存回答表的功能,BC为多选答案,A为单选答案)请问各位有谁能解答我的难题?
没有画红框部分的代码,我的想法是想写类似键值对,把需要的数据提出来,但是本人基础太差,实现不了,这个项目又自己独立的实在没办法
附上数据库表

img

前端直接组装 js的数组数据,后端用 List 作为 controller的入参即可, 参考如下:

let array = new Array();
let object = new Object();
array.push(object);

// ajax 直接data传 array

// 后端程序spring mvc 入参用 List<Entity> 

看了你们的评论记录,你应该是还不明白如何使用数组,先不用想看他们那么复杂的东西,你可能还没到那种程度可以看明白他们在说什么。 你在你图片代码 60行之后加一条下面的代码。这样就回去到了一个集合, 遍历出来后就是你操作单个数据的写法了


        List<AnswerQuestionEntity> list = JSON.parseArray(jsonobiect.toJSONString(),AnswerQuestionEntity.class);
        for (AnswerQuestionEntity answer:list ) {
            //answer 就是你操作的都是单个数据时显示的内容了
            //重复你如何操作单个数据时候的操作就好,这里会根据你的数据量重复执行多次
        }

题主的代码我觉得存在一定问题,使用的@RequestBody一般对应的是某个实体对象,题主直接用String类型

img

还有就是这个方法下如果没有其他代码,看着也提交不到数据库里边啊!这代码只是把一个实体的相关属性值设置上,并没有执行数据库的操作的代码啊!

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7445523
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 我们老师给我们花了100个星星的重要,那就是非常重要,快速排序。名字就很嚣张。。。言归正传,快排采用了分治算法。把大问题,分解成小问题。首先我们先找一个基准值,基准值的寻找法,有很多,这里我先用一个取边上值得方法,找到基准值以后呢拿着这个基准值和所有数组比较,使这个数组中比基准值小的都放左边,比基准值大的都放到右边,然后就把原来数组分成三块,中间基准值,左边都是比它小的,右边都是比它大的。然后这两个数组,继续分,一直分。直到他的终止条件,也就是小数组有序了就停止,那么什么时候有序停止呢?小区间长度为1或者长度为0的时候,就是有序了。所有小数组都有序了,那么就是整个数组有序了。只是原理,那么问题,又来了,怎么放左放右呢?我目前会三种。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

  • 以下回答由chatgpt基于相关博客总结生成:

    我认为您的问题是如何从一个字符串中提取数据,并将这些数据存储到数据库中。首先,您需要先解析字符串,对于给定的字符串,我们需要定义一个数据模型来存储所需的三个字段,然后对初始字符串进行解析和提取,将数据填充到模型中,最后将该模型保存到数据库中。

    1. 定义数据模型

    您需要定义一个数据模型来存储所需的三个字段,即questionId,questionnaireId和answer。可以定义一个类来表示此模型,如下所示:

    public class QuestionModel {
        private int questionId;
        private int questionnaireId;
        private int answer;
    
        public int getQuestionId() {
            return questionId;
        }
    
        public void setQuestionId(int questionId) {
            this.questionId = questionId;
        }
    
        public int getQuestionnaireId() {
            return questionnaireId;
        }
    
        public void setQuestionnaireId(int questionnaireId) {
            this.questionnaireId = questionnaireId;
        }
    
        public int getAnswer() {
            return answer;
        }
    
        public void setAnswer(int answer) {
            this.answer = answer;
        }
    }
    
    1. 解析字符串并提取数据

    为了解析字符串并提取数据,我们可以使用Java的字符串操作方法,例如indexOf,substring和trim等。我们可以将初始字符串拆分成三行,使用字符串操作方法从每行中提取数据,并将其填充到刚刚定义的数据模型中。下面是一个示例代码:

    String inputStr = "questionId:1\nquestionnaireId:2\nanswer:3";
    String[] inputArray = inputStr.split("\n");
    
    QuestionModel questionModel = new QuestionModel();
    for (String inputLine : inputArray) {
        String[] lineArray = inputLine.split(":");
        String key = lineArray[0].trim();
        String value = lineArray[1].trim();
    
        if (key.equals("questionId")) {
            questionModel.setQuestionId(Integer.parseInt(value));
        } else if (key.equals("questionnaireId")) {
            questionModel.setQuestionnaireId(Integer.parseInt(value));
        } else if (key.equals("answer")) {
            questionModel.setAnswer(Integer.parseInt(value));
        }
    }
    
    1. 将模型保存到数据库

    最后,您需要将填充好的数据模型保存到数据库中。在Spring Boot项目中,您可以使用JPA或者JdbcTemplate等技术来访问和更新数据库。在这里,我们使用JPA技术为例,在Spring Boot配置文件中配置数据库连接和实体类映射,然后就可以使用JpaRepository记录模型了,如下所示:

    application.yml文件配置:

    ``` spring: datasource: url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8 username: root password: root driver-class-name: com.mysql.jdbc.Driver jpa: database: mysql show-sql: true hibernate: ddl-auto:

接收到的是一个JSON字符串,可以将其转换成java实体对象,例如:XXX xxx = JSON.parseObject(json,XXX.class);其中XXX就是你自己写的一个java实体类,每一个字段属性就是json字符串中的key。