如何使用记录将JSON字符串转换为二进制?Web.Contents + POST + Power Query

谢尔盖·洛塞夫(Sergey Lossev)

Web.Contents方法将Content作为二进制

我使用此代码。有用

query = "{
    ""field1"" : ""value1"",
    ""field2"" : ""value2"",
    ""field3"" : {
        ""sub_field_3_1"" : [""value_3_1_1"", ""value_3_1_2"", ""value_3_1_1""],
        ""sub_field_3_2"" : [""value_3_2_1"", ""value_3_2_2"", ""value_3_2_1""]
        }
    }",

content = Text.ToBinary(query),

Web.Contents("https://my_url", [
    Headers = [#"Content-Type"="text/xml; charset=utf-8"],
    Content=content
])

我知道,这不是一个好的解决方法,因为没有理由进行双重转换。但是我找不到一种方法来应用记录,它应该看起来像这样:

record = [
    field1 = value1,
    field2 = value2,
    field3 = [
        sub_field_3_1 = {value_3_1_1, value_3_1_2, value_3_1_1},
        sub_field_3_2 = {value_3_2_1, value_3_2_2, value_3_2_1}
    ]
],

content = SOME_CONVERTER(record),

Web.Contents("https://my_url", [
    Headers = [#"Content-Type"="text/xml; charset=utf-8"],
    Content = content
])

试图使用Uri.BuildQueryString如何使用Power Query的Web.Contents来发布多部分/表单数据),但是它不能正确地形成Binary

record = [
    field1 = value1,
    field2 = value2,
    field3 = [
        sub_field_3_1 = {value_3_1_1, value_3_1_2, value_3_1_1},
        sub_field_3_2 = {value_3_2_1, value_3_2_2, value_3_2_1}
    ]
],

content = Text.ToBinary(Uri.BuildQueryString(record)),

Web.Contents("https://my_url", [
    Headers = [#"Content-Type"="text/xml; charset=utf-8"],
    Content=content
]

有更好的解决方法吗?

卡尔·沃尔什

目前,您的硬编码JSON字符串是更好的解决方案之一。

这并不理想,但是您可以使用自己的值到JSON转换功能,例如toJson

let
    record = [
        field1 = "value1",
        field2 = "value2",
        field3 = [
            sub_field_3_1 = {"value_3_1_1", null, 3.2},
            sub_field_3_2 = {"value_3_2_1", "value_3_2_2", "value_3_2_1"}
        ]
    ],

    toJson = (v as any) as text =>
      if v is null then "null" else 
      if v is logical or v is number then Text.From(v) else
      if v is text then """" & Text.Replace(Text.Replace(v, "\", "\\"), """", "\""") & """" else
      if v is list then "[" & Text.Combine(List.Transform(v, @toJson), ", ") & "]" else
      if v is record then "{" & 
        Text.Combine(List.Transform(
          Record.FieldNames(v),
          (n) => @toJson(n) & ": " & @toJson(Record.Field(v, n))), ", ")
        & "}" else
      error "not implemented",  

    jsonText = toJson(record)
in
    jsonText

与实际Json.FromValue库函数应做的工作相比,存在一些缺陷

  • 仅原始文本转义
    • 有关需要转义的所有特殊字符,请参见json.org
  • 不处理循环M值,特殊的非数字或其他类型的值类型
  • 将阻塞非常大的值(字符串concat将使用大量内存)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Power Query堆叠列

来自分类Dev

在Power Query中使用参数

来自分类Dev

使用file_get_contents POST数据

来自分类Dev

使用Power BI / Power Query从表到JSON

来自分类Dev

如何记录Excel Power Query步骤?

来自分类Dev

将DAX if语句转换为Power Query(或M)?

来自分类Dev

如何从Power Query获得vlookup类型的体验

来自分类Dev

AngularJS $ http-post-将二进制文件转换为Excel文件并下载

来自分类Dev

blank output of post contents

来自分类Dev

如何使用Power Query的Web发布内容/表单数据

来自分类Dev

如何使用Python将XML字符串转换为二进制形式?

来自分类Dev

通过Power Query选择JSON记录作为Excel表

来自分类Dev

将字符串转换为二进制?

来自分类Dev

将二进制转换为字符串

来自分类Dev

将字符串转换为二进制?

来自分类Dev

Power Query / Power BI-将空值替换为另一列中的值

来自分类Dev

将二进制字符串转换为二进制

来自分类Dev

将二进制字符串转换为二进制

来自分类Dev

将二进制字符串转换为二进制补码

来自分类Dev

将二进制字符串(ASCII)转换为二进制文件

来自分类Dev

Python 将二进制字符串转换为二进制整数

来自分类Dev

使用 Power Query M 将分类列转换为虚拟列

来自分类Dev

如何在Power Query / M中转换列表类型

来自分类Dev

如何为Power Query中的单元格中子字符串的每次出现编号?

来自分类Dev

将json文件加载到Power Query中

来自分类Dev

将JSON键值映射表加载到Power Query中

来自分类Dev

如何将指数平滑模型预测值获取到POWER BI / POWER Query数据集?

来自分类Dev

将十六进制字符串转换为二进制并使用netcat发送

来自分类Dev

使用字符串将二进制转换为八进制

Related 相关文章

热门标签

归档