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

从JSON提取指定参数值失败求助:地址大小写匹配问题

问题解决:以太坊地址大小写不匹配导致JSON解析匹配失败

问题描述

首次处理API返回的JSON字符串,目标提取offerer(值为0x71b7f0c5f064dd4278feb6a8f732f7167df3ed27)和startAmount(值为14400000000000000)的参数值。基于C#的JObject编写了解析代码,但传入对应地址调用方法时返回结果为0。排查后确认脚本逻辑正常,问题根源是传入的offerer地址与JSON中的地址大小写不一致,导致匹配失败。

解决方案

以太坊地址的大小写受EIP-55规范约束,直接做普通字符串相等判断会因大小写差异失败,可通过以下两种方式解决:

  • 方式一:统一转为同一大小写后比较
    把JSON中提取的地址和传入的地址都转为小写(或大写),再执行相等判断。示例代码:

    // 从JSON中提取offerer地址
    string jsonOfferer = (string)jObject["offerer"];
    // 传入的目标地址
    string inputOfferer = "0x71B7F0C5F064DD4278FEB6A8F732F7167DF3ED27";
    
    // 统一转小写后匹配
    if (jsonOfferer.ToLower() == inputOfferer.ToLower())
    {
        // 匹配成功,提取startAmount
        var startAmount = jObject["startAmount"];
        // 后续业务逻辑处理
    }
    
  • 方式二:用EIP-55规范标准化地址后比较
    借助以太坊开发库(如Nethereum)将地址转为符合EIP-55的校验格式,既保证地址合法性,又统一大小写。示例代码:

    using Nethereum.Util;
    
    var addressUtil = new AddressUtil();
    // 标准化JSON中的地址
    string normalizedJsonOfferer = addressUtil.ConvertToChecksumAddress(jsonOfferer);
    // 标准化传入的地址
    string normalizedInputOfferer = addressUtil.ConvertToChecksumAddress(inputOfferer);
    
    if (normalizedJsonOfferer == normalizedInputOfferer)
    {
        // 匹配成功,提取startAmount
        var startAmount = jObject["startAmount"];
        // 后续业务逻辑处理
    }
    

关键提示

以太坊地址本质是160位哈希值,大小写不影响地址指向,但EIP-55通过大小写校验降低输入错误风险。因此做地址匹配时,绝对不能直接用普通字符串相等判断,必须统一格式或标准化后再比对,才能保证匹配结果可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:07:13