Welcome everyone

Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Invalid JSON text…

java 汪明鑫 46浏览 0评论

我想把map转为json存在mysql的一个字段中数据类型为json

 

表如下

CREATE TABLE tb (
     id BIGINT NOT NULL PRIMARY KEY auto_increment,
     info json
 );

这个info就是json数据格式

 

map转换json我们使用fastjson

maven依赖

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.57</version>
    </dependency>

 

public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(0, "1");
        map.put(1, "");
        map.put(2, "0");
        map.put(3, "0");
        map.put(4, "100");
        map.put(5, "30");

        //map转json字符串
        String mapJson = JSON.toJSONString(map);
        System.out.println(mapJson); 
        
        //然后插入数据库 
        ....

 

报错:

Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Invalid JSON text: “Missing a name for object member.” at position 1 in value for column ‘tb.info‘.

 

原因:

json格式有问题

mapJson  {0:”1″,1:””,2:”0″,3:”0″,4:”100″,5:”30″}

 

map转json,map的key都得是String

 

Map<Integer, String> map = new HashMap<>(); 改成

Map<String, String> map = new HashMap<>(); 即可

 

mapJson {“0″:”1″,”1″:””,”2″:”0″,”3″:”0″,”4″:”100″,”5″:”30″}

 

 

不再报错,成功插入数据库!

 

还有一点值得一提的是

将map对象转换为json时,如果key的value值是null,将不会将其加入json字符串

 

/**
 * test null for map
 *
 * @author wmx
 * @date 2019-08-15
 */
public class Test1 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("0", "1");
        map.put("1", "");
        map.put("2", null);
        map.put("3", "0");
        map.put("4", "100");
        map.put("5", null);


        //map转json字符串
        String mapJson = JSON.toJSONString(map);
        System.out.println(mapJson);
    }
}

输出: {“0″:”1″,”1″:””,”3″:”0″,”4″:”100″}

我们发现key为2,5的由于value为null,在转为json后不显示

 

感觉json数据格式和fastjson挺有意思的,后续好好学习一下

转载请注明:汪明鑫的个人博客 » Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Invalid JSON text…

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz