添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不太喜欢用这种手段,因为他们比较低效。于是我想这里总结一下,做一下备忘,希望也对大家有帮助。

json字符串解析

MySQL解析JSON字符串,可以使用MySQL的JSON函数。

使用 JSON_EXTRACT 函数来提取JSON字符串中的特定值。例如:

SELECT JSON_EXTRACT('{"name": "Tom", "age": 18}', '$.name');

数组字符串解析

同样我们还是使用JSON_EXTRACT函数,解析如下数据

'[1,[2],3]'

我们实现将数组字符串中第二个元素解析出来,第二个元素的下标是1。于是代码如下:

SELECT JSON_EXTRACT(JSON_EXTRACT('[1,[2],3]', '$[1]'), '$[*]') AS result;

JSON数组字符串解析

基于以上我们对,json字符串和数组的解析,以此我们发挥一下使用JSON_EXTRACT进行JSON数组字符串解析,我们试着解析下边的JSON数组字符串:

'[{"ruleCode": "active_default", "ruleName": "默认激活规则", "necessary": 0, "ruleValue": {"level": "app", "timesLimit": 1}, "activateType": "active", "triggerEvent": ["boot", "register", "login"], "ruleDescription": "基础激活规则, 当用户启动app,注册,登录的时候触发检查回传条件,回传次数1次, 规则级别 app", "openConfiguration": 0}, {"ruleCode": "active_pay_in_active_day", "ruleName": "归因当天下单上报规则", "necessary": 0, "ruleValue": {"level": "app", "funnel": "4/1", "timesLimit": 1, "afterActiveTime": 0, "afterActiveTimeUnit": "day"}, "activateType": "active_pay", "triggerEvent": ["recharge", "create_vip"], "ruleDescription": "自然日上报首单规则, 当用户发生订单支付的时候触发检查回传条件, 用户必须是在激活当天产生的订单才上报,并且仅上报1次", "openConfiguration": 0}]'

我们实现下代码:

SELECT JSON_EXTRACT('[{"ruleCode": "active_default", "ruleName": "默认激活规则", "necessary": 0, "ruleValue": {"level": "app", "timesLimit": 1}, "activateType": "active", "triggerEvent": ["boot", "register", "login"], "ruleDescription": "基础激活规则, 当用户启动app,注册,登录的时候触发检查回传条件,回传次数1次, 规则级别 app", "openConfiguration": 0}, {"ruleCode": "active_pay_in_active_day", "ruleName": "归因当天下单上报规则", "necessary": 0, "ruleValue": {"level": "app", "funnel": "4/1", "timesLimit": 1, "afterActiveTime": 0, "afterActiveTimeUnit": "day"}, "activateType": "active_pay", "triggerEvent": ["recharge", "create_vip"], "ruleDescription": "自然日上报首单规则, 当用户发生订单支付的时候触发检查回传条件, 用户必须是在激活当天产生的订单才上报,并且仅上报1次", "openConfiguration": 0}]','$[1].ruleValue.funnel');

这是目前笔者使用JSON_EXTRACT函数的一些浅见,欢迎大家在评论区,交流经验和问题

JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。 JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。 下面一起来实际操作一下。 创建带有 JSON 字段的表 比如一个‘文章’表,字段包括 id、标题 title、标签 tags 一篇文章会有多个标签,tags 就可以设为 JSON 类型 建表语句如下: CREATE
JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 MySQL 8.0版本中增加了对JSON类型的索引支持。可以使用CREATE INDEX语句创建JSON类型的索引,提高JSON类型数据的查询效率。 存储JSON文档所需的空间与存储LONGBLOB或LONGTEXT所需的空间大致相同。 在MySQL 8.0.13之前,JSON列不能有非空的默认值。 JSON 类型比较适合存储一些列不固定、修改较少
使用mysql的内置函数JSON_EXTRACT(column, '$.key'),这个函数有两个参数,第一个参数column代表json列的列名;第二个参数key代表json字符串中的某一个key。 举个栗子: 如果mysql表中有一个字段是字符串类型的。比如:record表中有个 result 字段内容如下,想解析出highNum和midNum的值 {"highNum":0,"rowNum":87986,"codeRowNum":67751,"midNum":8,"problemNum":10,"
Postgres SQLite的 我这样做的唯一原因是无需创建自定义buildpack就可以从Cloud Foundry Python应用程序访问MSSQL数据。 特别是,这意味着我无法安装FreeTDS。 因为我想在不修改任何现有代码的情况下将其与Pandas包一起使用,所以API的返回类型是一个顶级数组,因此read_json方法可以直接使用它。 使用go get github.com/michaelbironneau/jsql ,然后使用go install 。 那你就可以跑 jsql --port 1234 --password scrambled_eggs 您现在可以使用客户端: import ( jsql "gith 1、拷贝lib_mysqludf_json_parsing.dll到mysql目录C:\Program Files\MariaDB 5.5\lib\plugin下 2、在数据库中执行 DROP FUNCTION json_get; CREATE FUNCTION json_get RETURNS STRING SONAME 'lib_mysqludf_json_parsing.dll'; SELECT json_get('{"a":1}', 'a') => 1 SELECT json_get('{"a":1}', 'b') => NULL SELECT json_get('[1,2,3]', 2) => 3 SELECT json_get('{"a":[2]}', 'a', 0) => 2
jsonmysql 轻松获取任何JSON对象,并将其创建+插入到根据其结构构建的mysql表中。 还可以使用JSON搜索,更新,索引和验证表。 include("config.php"); include("include.classloader.php"); $classLoader->addToClasspath(ROOT); $mysql = new MySQLConn(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASS); $db = new JSONtoMYSQL($mysql); // create some json $obj = json_decode('{"id":4,"name" : "asfd"}'); // save it to a table $db->save($obj, "brandnewt
注:所有的时间日期函数都可以在第二个可选参数中接受时区参数。示例:Asia / Yekaterinburg。在这种情况下,它们使用指定的时区而不是本地(默认)时区。仅支持与UTC相差一整小时的时区。 localhost :) select toDateTime(146600280) AS time,toDateTime(146600280,'Asia/Yekaterinburg') AS time_asia,toDateTime(146600280,'US/Samoa') AS time_us,toDa.
多个不同类型的物体参与完成某一件事情,异构系统的各个组成部分具有自身的自治性,实现数据共享的前提下,仍保留有自己的应用特性,完整特性,安全特性。 多个相同类型的物体参与完成某一件事情。 数据源中的同构与异构 同构数据源: 如果你需要讨论一群鸟类或者一批飞机,那么这样的数据是同构的,比如包含鸟类的数组 [Bird] 和包含飞机的数组[Airplane]。 异构数据源: 有时候你想探讨的是这些空中家伙的共性 “飞翔”,因此你的数据源可能同时包含 Bird和 Airpl
MySQL 5.7.8 及以上版本中,可以使用 JSON 数据类型存储和操作 JSON 数据。如果要解析 JSON 字符串,可以使用 MySQLJSON 函数来实现。 以下是一些常用的 JSON 函数: 1. JSON_EXTRACT():从 JSON 字符串中提取指定的键值对。 2. JSON_VALUE():从 JSON 字符串中提取指定的值或键值对。 3. JSON_SET():向 JSON 字符串中添加或更新键值对。 4. JSON_REMOVE():从 JSON 字符串中删除指定的键值对。 例如,假设有一个名为 `employees` 的表,其中包含一个名为 `info` 的 JSON 类型的列。下面的示例演示了如何使用 JSON_EXTRACT() 函数从 JSON 字符串中提取数据: ```sql SELECT JSON_EXTRACT(info, '$.name') AS name, JSON_EXTRACT(info, '$.age') AS age FROM employees; 这将从 `info` 列中提取 `name` 和 `age` 键的值,并返回一个结果集。 请注意,JSON 函数仅适用于 MySQL 5.7.8 及以上版本。如果您的 MySQL 版本低于此版本,则无法使用这些函数。
Flink CDC报The connector is trying to read binlog starting at xxx but this is no longer available问题解决 夕阳下的独行者: 怎么解决的啊?是binlog过期时间设置更长了吗?还是用了 when_needed模式? hivesql -- array_contains()函数使用 sinat_17169141: array_contains()直接应用案例,那块函数名打错了 sql中的几种join 及 full join问题 o荷塘月色o: 这么看来,oracle还是比mysql更强大。 Flink CDC报The connector is trying to read binlog starting at xxx but this is no longer available问题解决 我解决了 你私聊我吧 看看能不能帮助到你