Power Query Expression error: A value of type "Record" cannot converted into type "Text"

Power Query Expression error: A value of type "Record" cannot converted into type "Text"

我遇到无法执行以下代码的问题。语法似乎没问题,但是当我尝试执行它时,我得到的响应是:

Expression.Error: We cannot convert a value of type Record to type "Text". Details: Value=[Record] Type=[Type]

let
body="{
""page"": ""1"",
""pageSize"": ""100"",
""requestParams"": {
    ""deviceUids"": [
        ""xxx-yyy-xxx-yyyy-xxxx"",
        ""yyy-xxx-yyy-xxxx-yyyy"",
        ""aaa-bbb-aaa-bbbb-aaaa"",
        ""ccc-ddd-ccc-dddd-cccc""
    ],
    ""entityColumns"": [
        {
            ""entityId"": ""144"",
            ""joinColumnName"": ""device_uid"",
            ""columnName"": ""device_random_date""
        }
    ],
    ""columnNames"": [
        ""ts"",
        ""device_uid"",
        ""1"",
        ""32"",
        ""55"",
        ""203"",
        ""204""
    ],
    ""startUnixTsMs"": ""1583413637000"",
    ""endUnixTsMs"": ""1583413640000"",
    ""columnFilters"": [
        {
            ""filterType"": ""eq"",
            ""columnName"": ""55"",
            ""value"": ""1234""
        }
    ],
    ""sortOrder"": [
        {
            ""column"": ""ts"",
            ""order"": ""DESC""
        },
        {
            ""column"": ""55"",
            ""order"": ""ASC""
        }
    ],
    ""entityFilters"": [
        {
            ""entityId"": ""144"",
            ""entityEntryIds"": [
                ""12345-221-232-1231-123456""
            ]
        }
    ]
}
}",
Parsed_JSON = Json.Document(body),
BuildQueryString = Uri.BuildQueryString(Parsed_JSON),
Quelle = Json.Document(Web.Contents("http://localhost:8101/device-data-reader-api/read-paginated/xxx-xxx-yyyy-yyyy", [Headers=[#"Content-Type"="application/json"], Content = Text.ToBinary(BuildQueryString)]))

在 奎尔

我试图删除数字的引号,但这导致了同样的问题,因为系统抱怨它无法将数字转换为文本。 我需要需要随请求一起移交的正文才能执行 POST 请求。我做错了什么?

由于您似乎想将其作为 application/json 发送,我认为您可以在代码中更改这一点:

Content = Text.ToBinary(BuildQueryString)

至:

Content = Text.ToBinary(body)

然后你也可以删除下面的行(因为你不需要它们):

Parsed_JSON = Json.Document(body),
BuildQueryString = Uri.BuildQueryString(Parsed_JSON),

我认为你不需要 Uri.BuildQueryString 除非你想发送为 application/x-www-form-urlencoded(即 URL 编码的 key-value 对)。


无关:如果有帮助,您可以在M中构建结构,然后使用JSON.FromValue将结构转换为可以直接放入POST主体的字节。下面是未经测试的示例。

let
    body = [
        page = "1",
        pageSize = "100",
        requestParams = [
            deviceUids = {
                "xxx-yyy-xxx-yyyy-xxxx",
                "yyy-xxx-yyy-xxxx-yyyy",
                "aaa-bbb-aaa-bbbb-aaaa",
                "ccc-ddd-ccc-dddd-cccc"
            },
            entityColumns = {
                [
                    entityId = "144",
                    joinColumnName = "device_uid",
                    columnName = "device_random_date"
                ]
            },
            columnNames = {
                "ts",
                "device_uid",
                "1",
                "32",
                "55",
                "203",
                "204"
            },
            startUnixTsMs = "1583413637000",
            endUnixTsMs = "1583413640000",
            columnFilters = {
                [
                    filterType = "eq",
                    columnName = "55",
                    value = "1234"
                ]
            },
            sortOrder = {
                [
                    column = "ts",
                    order = "DESC"
                ],
                [
                    column = "55",
                    order = "ASC"
                ]
            },
            entityFilters = {
                [
                    entityId = "144",
                    entityEntryIds = {
                        "12345-221-232-1231-123456"
                    }
                ]
            }
        ]
    ],
    Quelle = Json.Document(
        Web.Contents(
            "http://localhost:8101/device-data-reader-api/read-paginated/xxx-xxx-yyyy-yyyy",
            [
                Headers = [#"Content-Type" = "application/json"],
                Content = Json.FromValue(body)
            ]
        )
    )
in
    Quelle

它可能看起来有点奇怪(因为 M 使用 [] 而不是 {}{} 而不是 []= 而不是 :), 但只是提一下以防有帮助。