使用 Power Query 和 JSON 转换记录
Posted
技术标签:
【中文标题】使用 Power Query 和 JSON 转换记录【英文标题】:Convert record with Power Query and JSON 【发布时间】:2018-09-27 12:53:25 【问题描述】:我在 Excel 2013 上使用 Power Query 将一个巨大的 JSON 文件(超过 100Mb)转换为普通的 excel 工作表。
除一个之外的所有字段都已正确转换,但有一个特定字段被识别为记录。所有其他字段都有一个固定的文本值或逗号分隔的值,因此转换非常容易,这个字段里面有一个JSON记录结构所以“字段”:“值”。
这是文件的摘录:
"idTrad": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"images":
"1": "SE1.JPG",
"2": "SE2.JPG"
,
"date": "2018-09-22",
"category": "MD",
"value": "Original text",
"language": "IT",
"contexts": [
""
],
"label": "Translated text",
"variantes": "1,23,45,23,32,232,2315,23131",
"theme": [
"XX_XXX"
]
有问题的字段是“图像”,因为它被识别为记录,在结果表中我有这种情况:
[1]: https://i.stack.imgur.com/EnHow.png
到目前为止我的查询是:
let
Source = Json.Document(File.Contents("filename.json")),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Column1 développé" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", "value", "contexts", "theme", "variantes", "category", "label", "language", "idTrad","images", "date", "Column1.value", "Column1.contexts", "Column1.theme", "Column1.variantes", "Column1.category", "Column1.label", "Column1.language", "Column1.idTrad","Column1.images", "Column1.date"),
#"Valeurs extraites" = Table.TransformColumns(#"Column1 développé", "Column1.contexts", each Text.Combine(List.Transform(_, Text.From), ","), type text),
#"Valeurs extraites1" = Table.TransformColumns(#"Valeurs extraites", "Column1.theme", each Text.Combine(List.Transform(_, Text.From), ","), type text)
in
#"Valeurs extraites1"
我想在图像字段中有记录的文本表示,例如“1:SE1.JPG,2:SE2.JPG”,有什么想法吗?
【问题讨论】:
【参考方案1】:当然,您甚至可以一步完成!如果将记录转换为表 (Record.ToTable),它将创建一个表,其中记录中的字段名称位于名为“名称”的列中,值位于名为“值”的列中。这样您就可以从 json 文件中获取“1”、“2”等。从那里您可以将列组合成您想要的文本,然后像在其余列中一样转换和组合一个列表。
= Table.TransformColumns(#"Valeurs extraites1","Column1.images",
each
Text.Combine(
Table.ToList(
Table.CombineColumns(
Record.ToTable(_)
,"Name", "Value",Combiner.CombineTextByDelimiter(": ", QuoteStyle.None),"Merged")
)
, ", ")
)
我认为 Record.ToTable 不会本地化它的列命名,但也许可以先将记录转换为表来测试它,看看它做了什么。
Table.TransformColumns(#"Valeurs extraites1","Column1.images",each Record.ToTable(_))
【讨论】:
以上是关于使用 Power Query 和 JSON 转换记录的主要内容,如果未能解决你的问题,请参考以下文章
如何将嵌套 JSON 有效负载的最深层元素转换为 Power Query 中的单独行?
在 Power Query 编辑器中将大 json 转换为 csv 时的限制