Power query解析json字串轉化為表格和將excel表格生成json格式字串
阿新 • • 發佈:2018-11-16
今天講解一下在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
得到的結果如下圖所示: