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. Java Singleton的3种实现方式

    1.通过静态成员字段来实例化 public class Elvis { /** * 通过final的静态成员字段来调用私有的构造函数实例化对象 */ public static final Elvis ...

  2. 【Linux】特殊符号$$,$#,$?等解释

    在linux系统中有很多的特殊符号,他们具有特殊的意义 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell的第一个参数 $2 是传递给该shell的第二个参数 $@ 是传递 ...

  3. 转 error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file

    我是今天再用emboss得时候发现出现问题了,再网上搜索了一下,发现有人和我一样得问题,解决得方法是: wget -O /usr/lib64/libmysqlclient.so.15 http://f ...

  4. URI -URL-URN区别

    URI -URL-URN区别 URI (uniform resource identifier)   统一资源标识符,用来唯一的标识一个资源URL(uniform resource locator)  ...

  5. Win7 64bit下值得推荐的免费看图软件

    自从更换到Win7 64bit后, 用了十多年的AcdSee3.x不能再正常工作了. 找到了两个替代品: Faststone Image Viewer 和 XnView Faststone Image ...

  6. Python-Flask实现基金自选网站

    代码地址如下:http://www.demodashi.com/demo/14734.html 项目介绍 本项目的基金数据来自天天基金网,但该网站用户体验较差,内容冗余,故自己实现一个轻量级网站,从8 ...

  7. Docker命令分类及使用场景分布(脑图)

    常见的Docker命令分类主要有 不同使用场景下的命令分布 有疑问可到官方文档查询: https://docs.docker.com/engine/reference/commandline/dock ...

  8. Easyui + asp.net MVC 系列教程 第09-17 节 完成登录 高清录制

    前面八节 在这里 Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门 在接下来的 几节里面 我们完成登录功能 打开页面 首先进入登录页面 只有登录成功了 才能进入管理 ...

  9. 怎么样删除linux里带括号的文件?

    可以用 rm -i * 就是对每个删除都提示用户是否确定,这样在出现 (2).htaccess 的时候你回答y就可以了,其他回答n,当删除了 (2).htaccess这个文件之后,就可以用Ctrl+C ...

  10. Struts2常见配置(草稿)

    Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件) 1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该 ...