【问题标题】:Convert JSON list to table where one record is a list将 JSON 列表转换为一个记录为列表的表
【发布时间】:2019-11-10 08:13:25
【问题描述】:

我有一个包含 253 个条目和 7 条记录的 JSON 列表,其中第 7 条记录是一个通常包含 2 个条目的列表。

我正在尝试在 Power Query 中将其转换为表格输出。我只是真正使用过 Excel 中的基本连接来自动执行此操作而没有问题。

我目前的错误是:

Expression.Error:我们无法将 Record 类型的值转换为 Text 类型。 细节: 价值=记录 类型=类型

我不确定该去哪里,也看不到针对我的具体情况的示例,尽管我确信有很多示例 - 只是我对此还不够了解,无法理解

[
  {
    "Id": "lorum-ipsum1",
    "Description": "sitename 1",
    "Latitude": 1.0,
    "Longitude": -1.0,
    "Postcode": "AB1 2CD",
    "CountryCode": "GB",
    "Connectors": [
      {
        "Id": "lorum-ipsum1-a",
        "Number": 1,
        "Status": 1,
        "ErrorCode": "NoError",
        "ChargepointName": "GP00000",
        "Shape": 0,
        "Mode": 0,
        "Volts": 240,
        "Amps": 0,
        "Phase": 2,
        "PricingInformationUrl": "hrefhere",
        "UsageRestrictions": []
      },
      {
        "Id": "lorum-ipsum1-b",
        "Number": 2,
        "Status": 1,
        "ErrorCode": "NoError",
        "ChargepointName": "GP0000",
        "Shape": 0,
        "Mode": 0,
        "Volts": 240,
        "Amps": 0,
        "Phase": 2,
        "PricingInformationUrl": "hrefhere",
        "UsageRestrictions": []
      }
    ]
  },
   {
    "Id": "lorum-ipsum2",
    "Description": "sitename 2",
    "Latitude": 1.0,
    "Longitude": -1.0,
    "Postcode": "AB1 2CD",
    "CountryCode": "GB",
    "Connectors": [
      {
        "Id": "lorum-ipsum2-a",
        "Number": 1,
        "Status": 1,
        "ErrorCode": "NoError",
        "ChargepointName": "GP00000",
        "Shape": 0,
        "Mode": 0,
        "Volts": 240,
        "Amps": 0,
        "Phase": 2,
        "PricingInformationUrl": "hrefhere",
        "UsageRestrictions": []
      },
      {
        "Id": "lorum-ipsum2-b",
        "Number": 2,
        "Status": 1,
        "ErrorCode": "NoError",
        "ChargepointName": "GP0000",
        "Shape": 0,
        "Mode": 0,
        "Volts": 240,
        "Amps": 0,
        "Phase": 2,
        "PricingInformationUrl": "hrefhere",
        "UsageRestrictions": []
      }
    ]
  },

【问题讨论】:

  • 您能否展示您希望结果表的外观?

标签: json excel powerquery


【解决方案1】:

我认为您想使用Table.FromRecords 函数将 JSON 转换为表格。但是,由于每条记录的Connectors 字段本身就是一个记录列表,我认为您需要再次调用它。

举个例子:

let
    serialised = "[{""Id"":""lorum-ipsum1"",""Description"":""sitename 1"",""Latitude"":1,""Longitude"":-1,""Postcode"":""AB1 2CD"",""CountryCode"":""GB"",""Connectors"":[{""Id"":""lorum-ipsum1-a"",""Number"":1,""Status"":1,""ErrorCode"":""NoError"",""ChargepointName"":""GP00000"",""Shape"":0,""Mode"":0,""Volts"":240,""Amps"":0,""Phase"":2,""PricingInformationUrl"":""hrefhere"",""UsageRestrictions"":[]},{""Id"":""lorum-ipsum1-b"",""Number"":2,""Status"":1,""ErrorCode"":""NoError"",""ChargepointName"":""GP0000"",""Shape"":0,""Mode"":0,""Volts"":240,""Amps"":0,""Phase"":2,""PricingInformationUrl"":""hrefhere"",""UsageRestrictions"":[]}]},{""Id"":""lorum-ipsum2"",""Description"":""sitename 2"",""Latitude"":1,""Longitude"":-1,""Postcode"":""AB1 2CD"",""CountryCode"":""GB"",""Connectors"":[{""Id"":""lorum-ipsum2-a"",""Number"":1,""Status"":1,""ErrorCode"":""NoError"",""ChargepointName"":""GP00000"",""Shape"":0,""Mode"":0,""Volts"":240,""Amps"":0,""Phase"":2,""PricingInformationUrl"":""hrefhere"",""UsageRestrictions"":[]},{""Id"":""lorum-ipsum2-b"",""Number"":2,""Status"":1,""ErrorCode"":""NoError"",""ChargepointName"":""GP0000"",""Shape"":0,""Mode"":0,""Volts"":240,""Amps"":0,""Phase"":2,""PricingInformationUrl"":""hrefhere"",""UsageRestrictions"":[]}]}]",
    deserialised = Json.Document(serialised),
    toTable = Table.FromRecords(deserialised),
    transformConnectors = Table.TransformColumns(toTable, {{"Connectors", Table.FromRecords}})
in
    transformConnectors

这给了我:

从那里,您可以自己探索/继续其余的转换(因为您没有指定您想要的)。

您可以通过单击上图中突出显示的图标或编写任何必要的M 代码来展开Connectors 列内的一些/所有嵌套列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2021-01-06
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多