插入Json数据到Mysql

MySQL JSON转义字符问题
本文记录了在MySQL 5.7中插入JSON格式数据时遇到的错误:Invalid escape character in string. 分析发现原因是数据中包含了换行符 ' ',通过使用 replace() 函数替换这些转义字符解决了问题。
部署运行你感兴趣的模型镜像

前言

MySQL 5.7已经原生支持JSON格式,我在插入Json数据的时候出错了,出错的过程记录一下。


过程

  1. 错误:Invalid JSON text: "Invalid escape character in string." at position...

  2. 分析:原来是数据自带了'\r\n'这样的换行符号。

  3. replace()替换掉对应的转义字符。

  4. 延伸:escape character(转义字符),在json.cn这样的网址转换是可以cover掉的,Mysql却不可以。

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

### Java 操作 MySQL JSON 数据 示例代码 以下是一个完整的示例,展示如何使用 Java 操作 MySQL 中的 JSON 数据。包括插入 JSON 数据、查询 JSON 数据并将其转换为字符串或 Java 对象。 #### 1. 插入 JSON 数据MySQL ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class InsertJsonData { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String password = "password"; String sql = "INSERT INTO user (id, info) VALUES (?, ?)"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { // 设置参数 int userId = 1; String jsonData = "{\"name\":\"John\", \"age\":30}"; pstmt.setInt(1, userId); pstmt.setString(2, jsonData); // 执行插入 pstmt.executeUpdate(); System.out.println("JSON data inserted successfully."); } catch (Exception e) { e.printStackTrace(); } } } ``` #### 2. 查询 JSON 数据并转换为字符串 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.json.JSONObject; public class QueryJsonData { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String password = "password"; String sql = "SELECT info FROM user WHERE id = 1"; try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { if (rs.next()) { String json = rs.getString("info"); System.out.println("JSON data from MySQL: " + json); // 将 JSON 字符串转换为 Java 对象 JSONObject jsonObject = new JSONObject(json); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); System.out.println("Name: " + name); System.out.println("Age: " + age); } } catch (Exception e) { e.printStackTrace(); } } } ``` #### 3. 使用 MyBatis 处理 JSON 字段 如果使用 MyBatis 框架,可以通过 `FastjsonTypeHandler` 来处理 JSON 字段[^3]。例如: ```java import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import com.baomidou.mybatisplus.annotation.TableField; public class User { private Integer id; @TableField(typeHandler = FastjsonTypeHandler.class) private String info; // Getters and Setters } ``` 通过这种方式,可以确保从数据库中读取的 JSON 字段不会为 `null`。 --- ### 注意事项 - 在操作 JSON 数据时,确保 MySQL 表中的字段类型为 `JSON`,以便充分利用 MySQLJSON 函数和优化[^1]。 - 如果需要将复杂的 JSON 数据保存到数据库中,可以递归解析 JSON 树形结构,并将其转换为对应的 Java 对象数组[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值