格式化转换如下
已知:表1
userIDTable
ADVC
ERFT
ERTT
求格式化为表2
userIDList
{ "user_list": [{"userid":"ADVC","lang":"zh_CN"},{"userid":"ERFT","lang":"zh_CN"},{"userid":"ERTT","lang":"zh_CN"}]}
格式化转换如下
已知:表1
userIDTable
ADVC
ERFT
ERTT
求格式化为表2
userIDList
{ "user_list": [{"userid":"ADVC","lang":"zh_CN"},{"userid":"ERFT","lang":"zh_CN"},{"userid":"ERTT","lang":"zh_CN"}]}
Json.FromValue的处理对象可以是上述的records as list,也可以是一个table。
本例也可以这样解:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
tbl = Table.AddColumn(源,"lang",each "zh_CN"),
Json = Text.FromBinary(Json.FromValue(tbl)),
表 = #table( {"userIDList"},{{ "{ ""user_list"": " & Json & "}" }} )
in
表
@Alex 如果表1的行是动态增加的,可以转换吗?我分步骤尝试了好几次,但结果还是不对。
let
源 = Excel.CurrentWorkbook(){[Name="原始表格"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"userIDTable", type text}}),
已添加自定义 = Table.AddColumn(更改的类型, "add", each Text.Combine({Text.Combine({"{""userid"":""",[userIDTable]}),"""lang"":""zh_CN""}"},",")),
删除的列 = Table.RemoveColumns(已添加自定义,{"userIDTable"}),
list=Table.ToList(删除的列),
txt=Lines.ToText(list,","),
addtxt=Text.Combine({"{ ""user_list"": [",txt,"]}"}),
转换为表 = #table(1, {{addtxt}}),
替换的值 = Table.ReplaceValue(转换为表,"""""","""",Replacer.ReplaceText,{"Column1"})
in
替换的值
fyi...
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
变 = "{ ""user_list"": ["
&
Text.Combine(
List.Transform(
源[userIDTable],
each "{""userid"":"""
&_&
""",""lang"":""zh_CN""}"
)
, ",")
&
"]}",
表 = #table({"userIDList"},{{变}})
in
表
或者用 Json.FromValue把主要部分先做出来,其它的细节相应处理一下就可以了
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
Json = Text.FromBinary(
Json.FromValue(
Table.TransformRows( 源, each _ & [lang="zh_CN"] )
)
)
in
Json
Json.FromValue的处理对象可以是上述的records as list,也可以是一个table。
本例也可以这样解:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
tbl = Table.AddColumn(源,"lang",each "zh_CN"),
Json = Text.FromBinary(Json.FromValue(tbl)),
表 = #table( {"userIDList"},{{ "{ ""user_list"": " & Json & "}" }} )
in
表
@绿夏
换行是手动对齐的,没有用格式化工具。
黑色的那一大块是网站的Markdown语法。代码前后输入一组```。
Dig Deeper
这种JSON格式转换,还有一种场景是对汉字的处理。
Text.FromBinary(Json.FromValue())解析出来的汉字是Unicode编码,
可以用JS中unescape进行转码处理成以汉字形式显示。
blw fyi:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
Json = Text.FromBinary(Json.FromValue(源)), //用Json.FromValue把源表转换成二进制,再用Text.FromBinary解析,得到Unicode字符
转义 = Text.Replace(Json,"\","%"), //把Unicode字符\uxxxx转换成%uxxxx形式的字符序列(x表示十六进制的数字),用于unescape解析
解析 = Web.Page("<script> var strObj = '"&转义&"';
result = unescape(strObj);
document.write(result);
</script>") [Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
解析
e.g.