PostgresQL 字符串隐式转换JSON脚本:

-- 隐式将varchar转换为json
CREATE OR REPLACE FUNCTION json_in_varchar(varchar) RETURNS json AS $$
SELECT json_in($1::cstring);
$$ LANGUAGE SQL IMMUTABLE; DROP CAST IF EXISTS (varchar as json);
CREATE CAST (varchar AS json) WITH FUNCTION json_in_varchar(varchar) AS IMPLICIT; -- 隐式将varchar转换为jsonb
CREATE OR REPLACE FUNCTION jsonb_in_varchar(varchar) RETURNS jsonb AS $$
SELECT jsonb_in($1::cstring);
$$ LANGUAGE SQL IMMUTABLE; DROP CAST IF EXISTS (varchar as jsonb);
CREATE CAST (varchar AS jsonb) WITH FUNCTION jsonb_in_varchar(varchar) AS IMPLICIT;
package com.apress.spring.domain;

import java.io.IOException;
import java.util.List; import javax.persistence.AttributeConverter;
import javax.persistence.Converter; import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;; /*
* */
@Converter
public class ListString2JsonConverter implements AttributeConverter<List<String>, String> { @Override
public String convertToDatabaseColumn(List<String> attribute) {
if(attribute == null || attribute.size() == 0) return "[]";
ObjectMapper mapper = new ObjectMapper();
String json = null;
try {
json = mapper.writeValueAsString(attribute);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return json;
} @SuppressWarnings("unchecked")
@Override
public List<String> convertToEntityAttribute(String dbData) {
ObjectMapper mapper = new ObjectMapper();
List<String> list = null;
try {
list = (List<String>) mapper.readValue(dbData, List.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
} } /*
* 使用hibernate类型转换
* SQL script:
* testdb=# create table testjson2(id serial, data json, answers jsonb, remain_balance decimal(19,6));
* */
@Entity
@Table(name = "testjson2")
public class Testjson2 { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; // List转换为String,数据库中再转换为JSON.
@Convert(converter = ListString2JsonConverter.class)
private List<String> answers;

PostgreSQL 保存json,jsonb类型的更多相关文章

  1. Postgres 的 JSON / JSONB 类型

    从 MySQL 5.7.8 开始,MySQL 支持原生的 JSON 数据类型. 一.介绍 json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等.而jsonb是解析输入后 ...

  2. js 对象 / json / jsonb / jsonp 区别

    一.JSON vs JS 对象 1.区别 区别 Javascript 对象 Json 含义 对象的实例 一种数据格式(序列化格式) 传输 不能传输 可以跨平台传输,轻量级 格式 1.键不加引号.加单引 ...

  3. postgresql jsonb类型查询

    select * from (select * from ud_order where user_id=10 and status=2unionselect * from ud_order where ...

  4. 6.Knockout.Js(加载或保存JSON数据)

    前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...

  5. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  6. mysql json 使用 类型 查询 函数

    一,对记录的操作 1.创建有json字段的表 -- 创建表 ) , info JSON); 2.插入记录 -- 插入含有json数组的记录 , , "abc", NULL, TRU ...

  7. Knockout.Js官网学习(加载或保存JSON数据)

    前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...

  8. 第六章:加载或保存JSON数据

    加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多 ...

  9. KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据

    Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...

随机推荐

  1. iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示

    文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学 ...

  2. mvn test

    mvn -B install -Dmaven.test.skip=true -Dautoconfig.skipmvn -B org.codehaus.mojo:cobertura-maven-plug ...

  3. 〖Android〗简单隐藏Android虚拟键盘的方法

    在Android使用 input 输入文本时,不期望出现虚拟键盘: 一般情况下,大家会把键盘给卸载,不过也有简单的方法: 就是下载一个 com.wparam.nullkeyboard (NullKey ...

  4. PMI网站中pdu查询

    1.PMI官网:http://www.pmi.org/ 2.登录--->点击“myPMI”-->右侧“CERTIFICATION STATUS”(国外网站常常加载慢  会加载不出来就不显示 ...

  5. scala object 转Class Scala强制 类型转换

    scala object 转Class Scala强制类型转换   asInstanceOf[T] 将对象类型强制转换为T类型. 还是由于泛型存在类型擦除的原因,1.asInstanceOf[Stri ...

  6. Android 百度鹰眼轨迹SDK(v2.1.6)

    闲聊 看过<鹰眼追击>这部电影的读者一定对"鹰眼"这台巨无霸计算机印象深刻,如今我们能够实现自己的鹰眼. 效果图 本篇为百度地图SDK第三篇博文 第一篇实现:Andro ...

  7. 【TP5.0】tp5.0实现连接多个数据库,实现类似3.2M(‘table’,'prefix_','db_config2')的CURD操作

    1.db_connect的name链式操作,类似于3.2的M('table','prefix_','db_config2') /** * db_connect的name链式操作,类似于3.2的M('t ...

  8. yum安装nodejs 8

    Install Node.js 8 on Enterprise Linux Distributions To install Node.js 8 on Enterprise Linux distros ...

  9. 蓝牙进阶之路 (001) - HC-05蓝牙无线模块设置

    USB转串口的有线转接方式,实在太难看了,尤其是寻接头,那是相当的不方便.其它电器厂商都想把是接头做小,做精致,唯独串口接头还是那么庞大,感觉应该换一换了,都已经完全不符合这个时代的审美观了. 于是, ...

  10. React(0.13) 定义一个动态的组件

    1.因为jsx将两个花括号之间的内容渲染为动态值,只需要引用对应的变量即可 <!DOCTYPE html> <html> <head> <title>R ...