mysql json处理

 2016-11-18

由于我们的爬虫开发偷懒,爬取回来的数据还是保持为json格式,所以需要进一步处理,从json格式的info字段中,提取出需要的信息作为新字段。

MySQL 从5.7版本开始,已经对原生json格式提供支持,由于目前线上主流的版本还是停留在5.6,所以这时需要人工去处理json格式的数据。

原始表示例数据如下:

取info字段中的一条记录为例:

{"title":"你不知道就out了,奥迪Coupe车型的第一次出现!","url":"http://mp.weixin.qq.com/s?__biz=MjM5NjM4NTAwMQ==&mid=2651782672&idx=1&sn=154dae8ec1c02403bab41c6f2c1ad679&chksm=bd1047968a67ce8086b9d8e2111ca33f49e74a44a24c9f05afac48c75e51147268573957eef9&scene=4#wechat_redirect","datetime":"2016-10-20 17:36"}

需要将其中的title、url、datetime提取出来。以下是处理所用到的sql:

SELECT
CURDATE() AS sys_date,
b.b_id AS id,
c.brand AS brand,
b.b_name AS brand_cn,
a.wxid AS wechat_id,
b.`name` AS wechat_cn,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.info,'"',12),'"',-1)  AS post_date,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.info,'"',4),'"',-1) AS post_title,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.info,'&mid=',-1),'&idx',1) AS post_id,
a.sn AS post_sn,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.info,'"',8),'"',-1) AS post_url,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.ext,':',-2),',',1)  AS page_views,
SUBSTRING_INDEX(SUBSTRING_INDEX(a.ext,':',-1),'}',1)  AS likes,
1 / 0 AS notes
FROM
    11_cmnc.message a JOIN 11_cmnc.subscription b JOIN 11_cmnc.wechat_conf c
ON a.wxid = b.wxid
AND b.b_id = c.id
GROUP BY b.b_id,a.sn
ORDER BY id,post_date;

生成的数据如下:

到这里,title、url、datetime已经从message表的info字段中提取出来了

原文地址:https://www.cnblogs.com/cenliang/p/6078376.html