缺少字段的Json Excel Power查询

缺少字段的Json Excel Power查询,excel,powerquery,Excel,Powerquery,当json对象列表中包含可选字段时,我在找出如何避免丢失整行错误方面遇到了一些困难,如以下示例: let Source = Json.Document("[ { ""name"": ""Peter"", ""age"": 42, ""email"": ""something""}, { ""name"": ""Peter"", ""age"": 42 }]"), Tabled = Table.FromRecords(Source) in T

当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
但我真的不想“忽略”这一点,所以我得到了如下结果:

# | 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      |
(应用于图纸时,null将消失)

理想情况下,需要更少“代码”的东西是理想的,但现在就可以了

如果有更好的解决方案,请随意共享>
Table.FromRecords()
在缺少字段时停止解析,请改用
Table.FromList()

试试下面,您可以使用扩展菜单Generate 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