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

解析JSON字符串时无法获取data数组内的balance字段,求解决办法

解决JSON外层带引号的解析问题

问题分析

你实际收到的是被外层双引号包裹的JSON字符串,本质是一个JSON字符串类型的值,而非直接的JSON对象。虽然你能通过JObject.Parse(json)["success"]拿到success值,但这是因为解析逻辑没有正确处理嵌套的JSON结构,导致无法访问内层data数组的字段。

可行解决方法

方法1:先解析外层字符串,再二次解析内部JSON

这是最稳妥的方式,先通过JToken.Parse取出内层的JSON内容,再解析为JObject:

// 第一步:解析外层字符串,获取内部的JSON文本
string innerJson = JToken.Parse(json).ToString();
// 第二步:将内部JSON解析为JObject
JObject rootObj = JObject.Parse(innerJson);

// 获取success字段
bool success = rootObj["success"].Value<bool>();
// 获取data数组中第一个元素的balance字段
decimal balance = rootObj["serviceResponse"]["data"][0]["balance"].Value<decimal>();

方法2:手动去除外层引号(仅适用于格式固定的场景)

如果能确保字符串首尾只有双引号,且内部没有未转义的双引号,可以直接修剪引号后解析:

// 去除首尾的双引号
string cleanedJson = json.Trim('"');
JObject rootObj = JObject.Parse(cleanedJson);

// 后续取值逻辑同方法1

⚠️ 注意:如果JSON内部包含转义的双引号(如\"),这种方法会破坏JSON结构,不推荐作为通用方案。

方法3:使用强类型实体类反序列化(更规范的生产级方案)

定义与JSON结构匹配的实体类,通过两次反序列化完成解析:

// 定义实体类
public class WalletInfo
{
    public string cardNo { get; set; }
    public string personnelNo { get; set; }
    public string name { get; set; }
    public string surname { get; set; }
    public decimal balance { get; set; }
    public int walletId { get; set; }
    public string walletName { get; set; }
}

public class ServiceResponse
{
    public List<WalletInfo> data { get; set; }
    public string responseMessage { get; set; }
    public int responseCode { get; set; }
}

public class ApiResponse
{
    public ServiceResponse serviceResponse { get; set; }
    public bool success { get; set; }
    public int responseCode { get; set; }
    public string responseMessage { get; set; }
}

// 解析逻辑
// 先取出内层JSON字符串
string innerJson = JToken.Parse(json).ToString();
// 反序列化为强类型对象
ApiResponse response = JsonConvert.DeserializeObject<ApiResponse>(innerJson);

// 直接访问字段
bool success = response.success;
decimal balance = response.serviceResponse.data[0].balance;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:55:40