使用 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 时的限制

power query中M函数和处理数据

从 Excel 数据模型/Power Query 查询单个数据点(获取和转换数据)

powerquery不自动转换

在 Power Query 中将负文本转换为十进制数