Power query解析json字符串转化为表格和将excel表格生成json格式字符串

     今天讲解一下在excel里面利用Power query生成json格式的字符串。在power query中处理json的函数有两个。一个是Json.Document()函数,用于解析json字符串,将其转化为list或者record对象。这个在网抓的时候我们多用到。只要把字符串处理成标准的json格式,直接在外面套上Json.Document()函数就可以了。如下图,我先得到一个json字符串:

这是很标准的json字符串了。我们在外面套上Json.Document()函数看看,如下图转化成了一record为成员的一个list.剩下的生成表格就很容易了。

 

点击“转换“选项卡下的到表,就转化为表。然后点击标题的按钮展开列,最终就将字符串转化为了表格。如下图 :

代码如下(//部分文字为注释)

let
    //这里只是获得表格中的json字符串,实际你也可能从其他来源获取,比如网络,数据库,txt..,利用Json.Document()函数解析,转化为了list列表
    源 = Json.Document(Excel.CurrentWorkbook(){1}[Content]{0}[表1]),
    //将list转化为table
    转换为表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    //最后展开table的record,得到最终的数据表
    finaltable= Table.ExpandRecordColumn(转换为表, "Column1", {"作物", "果实售价"})
in
    finaltable

下面在讲解一下如何将excel数据表格生成json格式,也就是前面的逆过程。数据表格如下图所示:

1、先将数据放进power query编辑器下:

2.利用Json.FromValue()将表转化为json格式字符串。不要忘了Json.FromValue()返回的是二进制。需要利用Text.FromBinary()返回字符串结果。

结果我们就看到如上图的结果了。默认返回Unicode编码字符。代码如下:

let
    //读取表格数据到power query
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    //Json.FromValue将table转化为json,文本输出。
    res=Text.FromBinary(Json.FromValue(源))
in
    res

现在我想生成汉字该怎么办呢。利用js的unescape函数对unicode编码进行解码。下面是构建一个自定义函数:

fx=(s as text)=>Web.Page("<script>var str='" & Text.Replace(s,"\u","%u") 
    & "';res=unescape(str);document.write(res);</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0},

那么我们再回到原来的例子上,看完整的代码:

let
    //读取表格数据到power query
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    //Json.FromValue将table转化为json,文本输出。
    res=Text.FromBinary(Json.FromValue(源)),
    fx=(s as text)=>Web.Page("<script>var str='" & Text.Replace(s,"\u","%u") 
    //自定义解码函数
    & "';res=unescape(str);document.write(res);</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0},
    //将Unicode编码字符转化为汉字
    hz=fx(res)
    
in
    hz

得到的结果如下图所示:

猜你喜欢

转载自blog.csdn.net/qq_24499417/article/details/81571947