将JSON列表转换为一个记录为列表的表

时间:2019-06-28 10:59:41

标签: json excel powerquery

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

我正在尝试在Power Query中对此进行转换,以便为我提供表输出。我只真正使用过Excel中的基本连接来自动完成此操作。

我当前的错误是:

  

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

enter image description here

我不确定要去哪里,也看不到适合自己具体情况的示例,尽管我确定有很多示例-只是我对此不够了解,无法理解

[
  {
    "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": []
      }
    ]
  },

1 个答案:

答案 0 :(得分:0)

我认为您想使用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

这给了我

Output table

从那里,您可以自己探索/继续进行其余的转换(因为尚未指定所需的内容)。

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