来自缺少字段的JSON的Excel Power Query

vcudknz3  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(117)

当有一个包含可选字段的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 |           |
9cbw7uwe

9cbw7uwe1#

好的,所以设法找到了一个解决方案,这是确定的,现在在我的情况下,虽然我认为一个更好的肯定可以作出,因为它是有点粗糙...

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应用于图纸时消失)
理想情况下,需要更少“代码”的东西将是理想的,但目前这将是可行的。
如果有人有更好的解决方案,请随时分享>.<

nzk0hqpo

nzk0hqpo2#

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

hkmswyz6

hkmswyz63#

Table.FromRecords有一个可选的missingField参数,可用于选择如何处理丢失的字段。MissingField.Type的选项包括:MissingField。错误,MissingField.IgnoreMissingField.UseNull
要将缺少的字段设置为空,请执行以下操作:

Table.FromRecords(Source, null, MissingField.UseNull)

请注意中间的额外null,因为您还必须将columns参数设置为null。

let
    Source = Json.Document("[
        { ""name"": ""Peter"", ""age"": 42, ""email"": ""something""},
        { ""name"": ""Peter"", ""age"": 42 }]"),
    Tabled = Table.FromRecords(Source, null, MissingField.UseNull)
in
    Tabled

相关问题