这是一个基于评论的问题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(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 的回答针对我在原始问题中提到的另一个回答。