Power Query 中的 JSON 转换 - 如何自动获取对象属性名称列表

Power Query 中的 JSON 转换 - 如何自动获取对象属性名称列表

这是一个基于评论的问题Excel:Power Query - 如何为表中的每一行重复代码块

假设我们有一个 JSON,其中包含对象数组,每个对象都有N其属性:

{
  "data": [
    {
      "data1": 1,
      "data2": 2,
      //...
      "dataN": N
    },
    {
      "data1": 11,
      "data2": 12,
      //...
      "dataN": 1N
    },
    {
      "data1": 21,
      "data2": 22,
      //...
      "dataN": 2N
    }
  ]
}

我想要获得一个包含每个数据属性的列的表。

+---------+---------+---+--------+
| data1   | data2   | … | DataN  |
+---------+---------+---+--------+
|       1 |       2 | … | N      |
|      11 |      12 | … | 1N     |
|      21 |      22 | … | 2N     |
+---------+---------+---+--------+

初步步骤是

Source = Json.Document(...),
data = Source[data],
ToTable = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

然后Table.ExpandRecordColumn语法是

Table.ExpandRecordColumn(ToTable, "Column1", {"data1", "data2" ... "dataN"}, {"data1", "data2" ... "dataN"})

手动编写确实很繁琐。如何获取包含 JSON 对象属性名称的列表({"data1", "data2" ... "dataN"})?

答案1

这有点令人尴尬,我花了一些时间和精力来表述我的问题后才弄清楚。所以我希望这能对其他人有所帮助。

解决方案是Record.FieldNames

如果 JSONdata数组中的所有对象都具有相同的属性集,我们就可以FieldNames从任何一个中提取Record

Source = Json.Document(...),
data = Source[data],
ToTable = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// Original code end

// Gets list of FieldNames from the first row in Column1
Headers = Record.FieldNames(ToTable[Column1]{0}),
// Creates table with columns acc. to List in Head
Result = Table.ExpandRecordColumn(ToTable, "Column1", Headers, Headers)

或者您也可以直接单击 GUI 中的按钮。有关详细信息,请参阅Ron Rosenfeld 的回答针对我在原始问题中提到的另一个回答。

相关内容