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

如何在Azure Data Factory中正确解析JSON的decimal类型?

Azure Data Flow解析JSON中.NET Decimal类型Amount字段的正确方案

问题场景

我在Azure SQL数据库中有一张表,某列包含如下JSON字符串:

{"Id":"4b11c702-d4b2-47f4-a8d6-0b8ab9f53c99","Date":"2021-11-15T00:16:43.7300189+00:00","Source":"AtlasEarth","SourceTransactionId":"5ad129d3-2b79-44b1-b617-2d86d352003a","SourceTransactionType":"Rent","Amount":0.000000000000000111}

作为Azure Data Flow的一部分,我尝试解析该JSON字符串并将部分属性存入复杂对象,大部分解析正常,但从.NET decimal属性序列化而来的Amount列格式错误,尝试float和double类型结果一致,请问如何获取该列的正确格式?

解决方案

float和double属于浮点数类型,无法精确存储高精度decimal值,会出现精度丢失或格式异常。针对该场景可通过以下两种方式处理:

1. 直接使用Decimal类型解析(推荐)

在Azure Data Flow的JSON解析配置中,为Amount字段指定decimal类型:

  • 打开Data Flow中的解析JSON转换组件
  • 在「结构(Schema)」配置里找到Amount字段,将数据类型修改为decimal,建议选择decimal(38,18)以覆盖.NET decimal的精度范围
  • 保存配置后重新运行数据流,即可精确解析该字段值。

2. 先按字符串解析再转换为Decimal

如果直接指定decimal类型仍有问题,可分两步处理:

  • 解析JSON时,将Amount的类型设为string
  • 添加派生列转换组件,使用表达式 toDecimal(Amount, 38, 18) 将字符串转换为高精度decimal类型
  • 替换原Amount字段或生成新字段使用。

补充说明

.NET的decimal类型精度最高可达28-29位有效数字,Azure Data Flow中的decimal(38,18)类型完全可以覆盖其精度需求,从根源上避免浮点数类型带来的精度丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:22:50