找文章 / 找答案
精选问答 更多内容

[可视化] 如何解析JSON字符串为多列

kevin2021青铜三 显示全部楼层 发表于 2022-1-10 18:19:55 |阅读模式 打印 上一主题 下一主题
1
未解决

【可视化】 如何解析JSON字符串为多列

3759 15
因为源系统的原因,数据库的某些字段存储的是JSON字符串。比如:
{"创建人":"张三","创建时间":"2022/1/10","状态":"已完成"}


我现在需要把这列分解成3列:创建人、创建时间、状态。


谢谢解答!!
回复

使用道具 举报

精彩评论15

永洪Tech-CIDX白银二 显示全部楼层 发表于 2022-1-10 18:29:25
您好,需要使用计算列实现,新建三个计算列,每个计算列单独提取信息
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-10 18:33:31
永洪Tech-CIDX 发表于 2022-1-10 18:29
您好,需要使用计算列实现,新建三个计算列,每个计算列单独提取信息

每个计算列怎么单独提取信息呢?能打个样吗,谢谢了!
回复

使用道具 举报

永洪Tech-CIDX白银二 显示全部楼层 发表于 2022-1-10 19:00:00
kevin2021 发表于 2022-1-10 18:33
每个计算列怎么单独提取信息呢?能打个样吗,谢谢了!

demo制作需要时间,做好了会回复哈
回复

使用道具 举报

永洪Tech-CIDX白银二 显示全部楼层 发表于 2022-1-10 19:29:01
kevin2021 发表于 2022-1-10 18:33
每个计算列怎么单独提取信息呢?能打个样吗,谢谢了!

如果我们要截取出 “张三”,可以使用mid函数,截取字符串:mid(string, start, [length])
返回从索引位置 start 开始的字符串。字符串中第一个字符的位置为 1。如果添加了可选参数 length,则返回的字符串仅包含该数量的字符。
开始位置和截取长度,可以使用 find函数确定位置:
find(find_string, with_string, [start_num] )
返回一个字符串在另一个字符串第一次出现的位置(区分大写,不允许通配符)。
如果未找到 find_string,则返回 0。
find_string查找的字符串。
with_string被查找的字符串。
start_num 可选参数,开始查找的位置,默认为1。
最后的计算列是:mid(col['列',find("创建人",col['列',1)+6,find("创建时间",col['列',1)-find("创建人",col['列',1)-9)
结果:
计算列计算结果.png
获取创建时间的计算脚本:mid(col['列',find("创建时间",col['列',1)+7,find("状态",col['列',1)-find("创建时间",col['列',1)-10)
获取状态计算列:mid(col['列',find("状态",col['列',1)+5,len(col['列')-find("状态",col['列',1)-6)
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-10 20:09:57
永洪Tech-CIDX 发表于 2022-1-10 19:29
如果我们要截取出 “张三”,可以使用mid函数,截取字符串:mid(string, start, [length])
返回从索引位置 ...

非常感谢这么细致的回复啊,不过这个方法对我可能有局限性,我实际场景比我的例子要复杂些:比如有些数据没有“创建时间”这个内容;或者处理人和创建时间的顺序可能是反过来的;

这是一个很长的公式,有没有可能写成多行代码,最后返回一个变量的值作为该列的值?比如
a=split(col[列],",")
For each aa in a
    b=split(a(0), ":")
    if b(0)="创建人"  then
        result=b(1)
     end if
  next
return result

如果可以像上面那样写成多行,就比较灵活、清晰了
回复

使用道具 举报

永洪Tech-CIDX白银二 来自手机 显示全部楼层 发表于 2022-1-10 20:30:47
本帖最后由 永洪Tech-CIDX 于 2022-1-10 20:32 编辑

我这边测试一下是否可行,如果能实现会回复哈
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-11 11:56:49
永洪Tech-CIDX 发表于 2022-1-10 20:30
我这边测试一下是否可行,如果能实现会回复哈

搞明白了,这样就能返回b的值。之前尝试用return b报错,刚用b蒙了一下蒙对了




回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-2-9 18:45:13
找到个更好的方法,JS有专门的方法解析JSON字符串。分享一下:
jStr={"创建人":"张三","创建时间":"2022/1/10","状态":"已完成"}
jObj=JSON.parse(jStr)
//如下是取JSON对象里的值
creator=jObj["创建人"]     //creator等于"张三"
createdOn=jObj["创建时间"]     //createdOn等于"2022/1/10"
status=jObj["状态"]     //status等于"已完成"
回复

使用道具 举报

Fiona 显示全部楼层 发表于 2022-2-10 09:19:20
kevin2021 发表于 2022-2-9 18:45
找到个更好的方法,JS有专门的方法解析JSON字符串。分享一下:
jStr={"创建人":"张三","创建时间":"2022/1/ ...

回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部