Postgres列,包含字符串unicode值

时间:2018-04-07 22:51:57

标签: json regex postgresql unicode

我有一个类型为TEXT的列query_params,但这些值存储为字符串unicode。该列中的每个值都以u为前缀,并且我很难将其删除

有没有办法从值中删除u并将值字典转换为列?

例如,查询SELECT query_params FROM api_log LIMIT 2返回两行

{
  u'state': u'CA',
  u'page_size': u'1000',
  u'market': u'Western',
  u'requested_at': u'2014-10-28T00:00:00+00:00'
},
{
  u'state': u'NY',
  u'page_size': u'1000',
  u'market': u'Eastern',
  u'requested_at': u'2014-10-28T00:10:00+00:00'
}

是否可以在postgres中处理unicode并转换为列:

state | page_size | market   | requested_at
------+-----------+----------+---------------------------
CA    | 1000      | Western  | 2014-10-28T00:00:00+00:00
NY    | 1000      | Eastern  | 2014-10-28T00:10:00+00:00

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你应该删除u个字母并用双引号替换单引号以获得格式正确的json。然后,您可以使用->>运算符来获取其属性:

select 
    v->>'state' as state,
    v->>'page_size' as page_size,
    v->>'market' as market,
    v->>'requested_at' as requested_at
from (
    select regexp_replace(query_params, 'u\''([^\'']*)\''', '"\1"', 'g')::json as v
    from api_log
    ) s;

SqlFiddle.

中测试解决方案

the documentation.

中了解POSIX正则表达式

regex101.com.

中查找正则表达式的解释