Excel 来自 Json 的 Power Query 缺少字段
Excel Power Query from Json with missing fields
当我有一个 json 具有可选字段的对象列表时,我在弄清楚如何解决丢失整行错误时遇到了一些麻烦,就像这个例子:
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
Tabled = Table.FromRecords(Source)
in
Tabled
这让我在第二行出现了一个大错误:
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Error | Error | Error |
Expression.Error: The field 'email' of the record wasn't found.
Details:
name=Peter
age=42
但我真的不想 "ignore" 那样,所以我得到类似的东西:
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Peter | 42 | |
好的,所以设法找到了一个目前对我来说还可以的解决方案,尽管我认为肯定可以做出更好的解决方案,因为它有点粗糙...
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
Transformed = List.Transform(Source, each Record.TransformFields(_, {
{ "email", Text.Trim },
{ "name", Text.Trim },
{ "age", Int64.From }
}, MissingField.UseNull)),
Tabled = Table.FromRecords(Transformed)
in
Tabled
产生
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Peter | 42 | null |
(应用于 sheet 时 null 消失)
理想情况下,需要的东西少得多 "code" 是理想的,但现在就可以了。
如果有人有任何更好的解决方案,请随时分享 >.<
Table.FromRecords()
缺少字段时停止解析,改用 Table.FromList()
。
试试下面,您可以使用展开菜单生成 table2 代码。
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
table1 = Table.FromList(Source,Splitter.SplitByNothing(),null,null,ExtraValues.Error),
table2 = Table.ExpandRecordColumn(table1, "Column1", {"name", "age", "email"}, {"Column1.name", "Column1.age", "Column1.email"})
in
table2
当我有一个 json 具有可选字段的对象列表时,我在弄清楚如何解决丢失整行错误时遇到了一些麻烦,就像这个例子:
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
Tabled = Table.FromRecords(Source)
in
Tabled
这让我在第二行出现了一个大错误:
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Error | Error | Error |
Expression.Error: The field 'email' of the record wasn't found.
Details:
name=Peter
age=42
但我真的不想 "ignore" 那样,所以我得到类似的东西:
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Peter | 42 | |
好的,所以设法找到了一个目前对我来说还可以的解决方案,尽管我认为肯定可以做出更好的解决方案,因为它有点粗糙...
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
Transformed = List.Transform(Source, each Record.TransformFields(_, {
{ "email", Text.Trim },
{ "name", Text.Trim },
{ "age", Int64.From }
}, MissingField.UseNull)),
Tabled = Table.FromRecords(Transformed)
in
Tabled
产生
# | name | age | email |
--------------------------------
1 | Peter | 42 | something |
2 | Peter | 42 | null |
(应用于 sheet 时 null 消失)
理想情况下,需要的东西少得多 "code" 是理想的,但现在就可以了。
如果有人有任何更好的解决方案,请随时分享 >.<
Table.FromRecords()
缺少字段时停止解析,改用 Table.FromList()
。
试试下面,您可以使用展开菜单生成 table2 代码。
let
Source = Json.Document("[
{ ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
{ ""name"": ""Peter"", ""age"": 42 }]"),
table1 = Table.FromList(Source,Splitter.SplitByNothing(),null,null,ExtraValues.Error),
table2 = Table.ExpandRecordColumn(table1, "Column1", {"name", "age", "email"}, {"Column1.name", "Column1.age", "Column1.email"})
in
table2