1. 程式人生 > >Power query解析json字串轉化為表格和將excel表格生成json格式字串

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

得到的結果如下圖所示: