SQL 如何从 Base64 编码串解析出键值对 *

Base64编码串:eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=

需要将其转码后的json串({"a":63,"c":298,"n":1,"s":1,"e":40,"p":4})解析成表,结果如下所示:

a

c

n

s

e

p

63

298

1

1

40

4

MySQLSQL

SELECT

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."a"') a,

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."c"') c,

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."n"') n,

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."s"') s,

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."e"') e,

            JSON_EXTRACT(CONVERT(FROM_BASE64('eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=')

                        USING utf8),

            '$."p"') p

 

这道题本身其实没有什么难度,只需要将Base64编码串转成json,再把json串按K-V解析成表即可。但是SQL写起来很繁琐,尤其当结果表的列数未知时,SQL写起来就会更加复杂。

 

用开源集算器的SPL就很容易写:

设参数arg1为:eyJhIjo2MywiYyI6Mjk4LCJuIjoxLCJzIjoxLCJlIjo0MCwicCI6NH0=


A

1

=json(base64(arg1,"UTF-8"))

SPL是专业的开源结构化计算语言,很容易计算json以及其他各类数据源。

问答搜集

https://stackoverflow.com/questions/64125272/how-to-extract-each-key-value-pair-of-a-decoded-base64-column-into-individual-co