今天讲解一下在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
得到的结果如下图所示: