Java JSON insert将自动编码到base64中
我有一个JSON对象,可以插入MySQL数据库Java JSON insert将自动编码到base64中,java,mysql,json,jdbc,base64,Java,Mysql,Json,Jdbc,Base64,我有一个JSON对象,可以插入MySQL数据库 ps = con.prepareStatement("INSERT INTO tableA(a, b, c, d_json)" + " VALUES(?,?,?,cast(? AS JSON))", Statement.RETURN_GENERATED_KEYS); // some code ps.setObject(4, jsonValue); 我插入字符串的哈希映射,如下所示: Map<S
ps = con.prepareStatement("INSERT INTO tableA(a, b, c, d_json)" +
" VALUES(?,?,?,cast(? AS JSON))", Statement.RETURN_GENERATED_KEYS);
// some code
ps.setObject(4, jsonValue);
我插入字符串的哈希映射,如下所示:
Map<String, String> map = new HashMap<String, String>();
map.put("key", "value");
map.put("key1", "value1");
map.put("key2", "value2");
Map Map=newhashmap();
地图放置(“键”、“值”);
地图放置(“键1”、“值1”);
地图放置(“键2”、“值2”);
但是,json的编码如下所示:
“base64:type15:Ro0abxnyabfqyxzhlnv0awwusgfzae1hcauh2shdfmdrawacrgarvckkacxrocmvz\nag9szhhwp0aaaaaaaaaaaaax3caaaaabaabanzhbhvlmxqabgtletj0aaz2ywx1ztj0\nAANrZXl0AAV2YWx1ZXg=“”
我想插入一个字符串而不是这个。
我在S.O上看到了一些帖子,但我没有找到任何合适的方法来修复它。任何帮助都将不胜感激。
谢谢 Java Mysql驱动程序不支持哈希映射的自动转换。事实上,如果在
setObject
中使用未知类型,它将使用默认的Java序列化将其转换为它可以处理的类型。数据库接收包含序列化哈希映射的字节数组。cast(?asjson)
将其转换为可以存储在列中的内容,即BASE64编码的字节数组
在将HashMap发送到数据库之前,您需要在Java代码中将其转换为JSON字符串。您不能直接将Java对象写入MySQL-您需要在将其写入表列之前将其转换为JSON字符串。 根据官方的说法:“如果值是有效的JSON值,则尝试将值插入JSON列成功,如果不是,则失败” 下面是一个例子(杰克逊):
import com.fasterxml.jackson.databind.ObjectMapper;
公开课考试{
私有静态最终ObjectMapper ObjectMapper=新ObjectMapper();
公共静态字符串toJSON(映射映射)引发JsonProcessingException{
返回objectMapper.writeValueAsString(映射);
}
}
另一种选择是创建一个额外的列e,然后简单地将映射写入两列:
map(k,v)=>d(k),e(v)
那么map
是您的json'值吗?您在文章中显示的base64包含大量不可打印的字节,它不是map
的JSON表示形式。事实上,我的问题是,即使我尝试使用在线工具对其进行解码,它也只会返回一些没有任何意义的东西。这有帮助吗?因为我使用了sql方法:cast as json。事实上,我不想太多地转换我的数据,这就是为什么我只是使用hashmap而不是JSON对象。但它显然不起作用,我想知道SQL应该如何将Java对象转换为JSON。非常感谢您回答和解释为什么它不起作用。我接受了皮奥特的回答,但你的回答和他的一样好!
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
private static final ObjectMapper objectMapper = new ObjectMapper();
public static String toJSON(Map<String, String> map) throws JsonProcessingException {
return objectMapper.writeValueAsString(map);
}
}