JSON不能被解析为Int32类型

编程语言 2026-07-11

在Robot Framework发送POST时我遇到了这个错误:

Message: There was an error deserializing the object of type ContentDirect.CoreService.Contract.Message.SubscriberManagement.SubmitChangeOfServiceOrderRequest. The value '2412053228149000107' cannot be parsed as the type 'Int32'.

我直接把变量保存在JSON中并在运行时更新它们,这可能相关,所以这是我用来把变量替换进JSON的代码

${remove_offer_payload}=    Get File    RemoveOffer.json
${str_payload}=    Replace Variables    ${remove_offer_payload}
${payload}=    Convert String To Json    ${str_payload}

我这样做是因为我想让我JSON的格式如下,然后再替换成正确的值

{
"RemoveItems": [
    {
      "ProductId": "{{ProductId}}",
      "PricingPlanId": "{{PricingPlanId}}"
    }
    ]
}

我尝试把所有变量替换成错误中的数字,但没有任何变化,有时这些字段是数字,有时是字符串,将所有数字都转换成字符串也没有改变任何东西。

如何让这个JSON处理那些数字?

解决方案

我不知道在这些约束下你期望如何取得任何进展。 你基本上是在对 n = 2_412_053_228_149_000_107 做了一个Python赋值,把它序列化为JSON,然后又试图使用一个将整数限制为 uint32_t 表示的JSON解析器来回传。是的,这行不通。

在十六进制中,n0x 2179 55A1 A327 C7AB。现在 0x2179 55A1 可以被压缩到32位之内。0xA327 C7AB 也可以。但你原来的 n 在我看来像是一个64位的数量。Python的“batteries included”内置库 import json 可以轻松处理你那2.4×10^18的数量级,甚至更大的数字。但那不是你选择使用的那一个JSON解析器。

让我们看规范

This specification allows implementations to set limits on the range and precision of numbers accepted.

你使用的库是否因为仅支持32位整数而存在代码缺陷?不,它很好地实现了JSON规范。但你使用它的方式不对,未遵守其文档所述的32位限制。

最好传递被引号包裹的 str(2412053228149000107),然后在此基础上调用 int(),或者更倾向于使用一个更强大的库,例如与你的Python解释器一起提供的那个库 the one

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章