mysql解析json数据组怎么获取数据组所有字段


    引言

    在开发过程中,遇到过json数据组的字符串,需要解析json组,得到组内所有的信息。如下格式:

    [{"itemId":3101,"itemName":"空滤器及进气管道"},{"itemId":3102,"itemName":"水管、水泵"},{"itemId":3103,"itemName":"柴油管道"},{"itemId":3104,"itemName":"高压泵、机油泵"}]

    观察json组发现,它是一个list里面包含多个json字符串,我们要做的是拆分出list所有json字符串,并对每个json字符串做解析。

    分析后发现,当JSON字符串独立存在时,可以使用JSON_EXTRACT方法进行提取。由于列表中包含多个JSON字符串,因此我们需要将列表拆分为多个JSON字符串。

    在学习本文内容之前,需要提前了解mysql两个函数:

    SUBSTRING_INDEXJSON_EXTRACT

    第一步:一行拆分成多行

    一行拆成多行,即把list拆分成多行 json,为此我们需要

    1.1 新建一张表keyid,只insert从0开始的数字,如下:

    mysql解析json数据组怎么获取数据组所有字段

    在其他的教程中,通过 mysql.help_topic 表的 help_topic_id 字段也是可以的。但是这个库表需要root权限才可以使用。因此建立自己的匹配表,是最合适的。

    注意:id的值,不能小于 list里面json字符串的个数。举例来说,如果在上述列表中有4个JSON字符串,那么id值必须大于4。help_topic_id最大值是700,如果list里面json字符串的个数大于这个值,用help_topic_id是不合适的。

    1.2 找到拆分标识符

    所谓拆分标识符,就是能根据此符号,一次性拆分成多行的标志。在下面list当中,没有找到拆分标识符,因此需要处理一下。可以将 ; 当成拆分标识符。处理后的内容如下:

    {"itemId":3101,"itemName":"空滤器及进气管道"};{"itemId":3102,"itemName":"水管、水泵"};{"itemId":3103,"itemName":"柴油管道"};{"itemId":3104,"itemName":"高压泵、机油泵"}

     去除前后 [ 和 ] 两个list标志,将 },{ 变成 };{ 这样就可以将 ; 变成拆分标识符。如下

    select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest

    mysql解析json数据组怎么获取数据组所有字段

    1.3 通过join on拆分多行

    此时,我们可以通过使用JOIN操作将maptest表和新建的keyid表连接起来,在ON条件下匹配多行数据。在通过 SUBSTRING_INDEX进行拆分。

    AILOGO AILOGO

    LOGO123旗下的AI智能LOGO生成器,只需输入品牌名称就能免费在线生成公司logo设计及配套企业VI,轻松打造您的个性品牌!

    AILOGO 139 查看详情 AILOGO

    mysql解析json数据组怎么获取数据组所有字段

     代码如下:

    select 
    a.jsonarr,
    SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ) AS jsonarr_info,
    b.id
    from 
    (select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
    join keyid b 
    on b.id< ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
    ;

    到此,就完成了 将json组,拆分成多行的工作。

    第二步:解析json字符串

    拆分成多行之后,就可以通过 JSON_EXTRACT 进行解析了。效果如下:

    mysql解析json数据组怎么获取数据组所有字段

    完成代码如下:

    select 
    a.jsonarr,
    SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ) AS jsonarr_info,
    b.id,
    JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ), '$[0].itemId') as itemId,
    replace(JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.id + 1 ), ";",- 1 ), '$[0].itemName'),'"','') as itemName
    from 
    (select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
    join keyid b 
    on b.id< ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
    ;

    当然通过 mysql.help_topic 表的 help_topic_id 字段也是可以。代码和结果如下:

    mysql解析json数据组怎么获取数据组所有字段

    select 
    a.jsonarr,
    SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ) AS jsonarr_info,
    b.help_topic_id,
    JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ), '$[0].itemId') as itemId,
    replace(JSON_EXTRACT(SUBSTRING_INDEX( SUBSTRING_INDEX( a.jsonarr, ";", b.help_topic_id + 1 ), ";",- 1 ), '$[0].itemName'),'"','') as itemName
    from 
    (select replace(replace(replace(jsonarr,"},{","};{"),"]",""),"[","") as jsonarr from maptest) a
    join mysql.help_topic b 
    on b.help_topic_id < ( length( a.jsonarr ) - length( replace ( a.jsonarr, ";", "" ) ) + 1 )
    ;

     注意: 通过 JSON_EXTRACT 解析出来的字段,如果是字符串,会带有 "" 双引号,只要replace替换掉即可。

    以上就是mysql解析json数据组怎么获取数据组所有字段的详细内容,更多请关注其它相关文章!


    # 中有  # 成都网站建设代办电话  # 广东网站推广网站  # 北京特制网站建设设计  # 湘西网站推广软件有哪些  # 线上推广营销策划公司  # 大理企业网站建设费用  # 百度电脑关键词排名工具  # 怀宁网站优化费用情况  # seo下坡路  # 移动网站建设的细节  # MySQL  # 机油泵  # 就能  # 您的  # 如何设置  # 的是  # 自己的  # 就可以  # 多个  # 镜像  # JSON 


    相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


    相关推荐: 《淘宝联盟》推广自己的店铺方法  《随手记》备份数据方法  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  处理含命名空间的XML文件 Power Query中的高级技巧  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  《360浏览器》设置摄像头权限方法  如何取消数字签名  《绿竹漫游》关闭消息通知方法  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  《友玩*》创建群聊方法  汽车之家网页版免费登录_汽车之家官网首页直接进入  b站如何管理订阅_b站订阅标签分类管理  J*aScript装饰器_元编程实战  PDF如何批量加注释_PDF多文件批注高亮操作教程  php如何实现多域名共享session_php存储session到redis与跨域读取配置  圆通快递官方入口不需要登录 在线查询入口快速查询  PHP动态导航按钮:根据用户登录状态切换链接与文本  Vue 3中独立响应式实例的创建与应用  从J*a应用程序中导出MySQL表数据的技术指南  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  鸿蒙单条备忘录如何加密  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  小米倒班助手添加日历提醒  抖音网页版官方链接 抖音网页版官网链接入口  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  我的世界官方网址入口 我的世界游戏主页直达入口  基于键值条件高效映射 Pandas DataFrame 多列数据  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  使用document.execCommand实现Web文本编辑器加粗/取消加粗  使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  Symfony路由参数转换器:实体存在性验证与错误处理策略  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  Go语言中方法接收器的选择:值类型还是指针类型?  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  WooCommerce 新客户订单自动添加管理员备注教程  《华夏千秋》龙女试炼功法获取方法  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  C#解析来自网络的XML流数据 实时错误处理与重试机制  iPhone14开启Apple TV遥控设置  《美篇》取消会员自动续费方法  创建快捷方式启动系统保护  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  《健康大兴》注册方法介绍  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置 

     2023-05-29

    了解您产品搜索量及市场趋势,制定营销计划

    同行竞争及网站分析保障您的广告效果

    点击免费数据支持

    提交您的需求,1小时内享受我们的专业解答。

    运城市盐湖区信雨科技有限公司


    运城市盐湖区信雨科技有限公司

    运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

     8156699

     13765294890

     8156699@qq.com

    Notice

    We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
    You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.