我在MemSql
数据库中有一个表,其中包含一列JSON
类型的列。
我正在尝试执行以下查询。
select tweet from tweets_json;
tweet
列是JSON
列。
这是我用来执行此查询的代码。
public List<String> getTweets(){
Query q = entityManager.createNativeQuery("select tweet from tweets_json");
List<String> resultList = query.getResultList();
}
我期望结果是一个字符串列表,每个字符串代表JSON。
问题是我将字符串转换为单个Character
对象,该对象仅包含JSON {
的第一个字符。
无论我使用的列表项目的类型如何,结果始终是带有大括号符号的字符列表。
我尝试使用List<Object[]>
,List<String[]>
,List<Object>
,List<JsonElement>
,所有结果都相同。
我什至尝试不指定列表元素的类型,而只返回一个List,结果仍然相同。
如何获取整个JSON,此问题的根本原因是什么?
答案 0 :(得分:1)
这对我有用。
在本机sql查询中使用CAST(tweet as CHAR(1000))
进行json的类型转换
Query q = entityManager.createNativeQuery("select CAST(tweet as CHAR(1000)) from tweets_json");
这将返回char[]
个数组,该数组可以转换为String
,并可以进一步使用。
答案 1 :(得分:0)
您需要使用JSON_EXTRACT_STRING函数。
select JSON_EXTRACT_STRING(tweet,0) from tweets_json;
确切的功能定义是:
JSON_EXTRACT_<type>(json, keypath)
您可以在此处查找示例: https://docs.memsql.com/sql-reference/v6.7/json_extract_type/
在这里
对于使用EntityManager / HibernateSession的常见情况,用户类型为必要https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/
答案 2 :(得分:0)
我将建议一种替代方法-您可以将列作为字符串检索,因此不需要Hibernate来了解有关JSON的任何信息:
Query q = entityManager.createNativeQuery("select tweet :> text from tweets_json");
这是将JSON字段强制转换为字符串数据类型text
(您也可以根据需要使用varchar或其他任何类型)。
两种方法返回的结果都是相同的(只是一个字符串),但是通过这种方式,Hibernate应该能够理解它是一个字符串。