You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Logic App中Compose转字符串,需保留float类型问题

解决Power Automate中JSON数字类型丢失导致API请求被拒的问题

问题分析

核心问题是Parse JSON后的数字字段在Compose动作中被转为字符串,即便用float()转换,HTTP POST时仍保持字符串类型,导致API因类型错误拒绝请求。这通常源于Parse JSON的Schema定义错误、Compose输出格式不当,或是HTTP请求序列化方式问题。

解决方案

1. 修正Parse JSON的Schema定义

检查Parse JSON动作的Schema,确保Kontraktsarea字段被定义为number类型,而非string:

{
  "type": "object",
  "properties": {
    "Kontraktsarea": {
      "type": "number" // 此处必须设为number,不能是string
    },
    // 其他字段定义...
  }
}

若Schema是自动生成的,可能误将带小数的数值识别为字符串,手动修改类型即可从源头规避类型错误。

2. 直接在HTTP请求体中使用类型转换(推荐)

跳过Compose中间层,直接在HTTP POST的请求体中编写表达式,确保数字类型不丢失:

{
  "livingspace": float(items('For_each')?['Kontraktsarea']),
  "otherField1": items('For_each')?['OtherField1'],
  "otherField2": items('For_each')?['OtherField2']
  // 其他所需字段
}

这种方式避免了Compose动作可能带来的额外序列化,确保livingspace以number类型发送给API。

3. 正确使用Compose动作(若必须保留)

如果一定要用Compose组合字段,不要用字符串拼接生成JSON,而是用createObject()函数生成真正的JSON对象:

createObject(
  'livingspace', float(items('For_each')?['Kontraktsarea']),
  'otherField1', items('For_each')?['OtherField1'],
  'otherField2', items('For_each')?['OtherField2']
)

之后在HTTP POST中直接引用outputs('Compose')作为请求体,此时livingspace会保持number类型。

4. 验证HTTP请求的Content-Type

确保HTTP POST动作的Headers中设置了:

Content-Type: application/json

若缺少这个头,Power Automate可能会以表单格式发送数据,导致数字被转为字符串。

验证方法

可以在Compose动作后添加一个额外的Compose动作,输入表达式:

typeof(outputs('Compose')?['livingspace'])

如果输出为Number,说明类型正确;若输出为String,则需要检查前面的步骤是否正确执行。

内容的提问来源于stack exchange,提问作者Sanktas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:45:14