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

C#如何将第三方API返回的item[index].key=value纯文本转JSON或C#对象

实现方案

核心思路

按行解析键值对,从键路径中提取数组索引和属性名,动态构建JSON结构,可直接输出JSON或者映射为C#对象,解析逻辑通用,适配不同结构的接口返回。

代码实现(基于Newtonsoft.Json)

using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;

public static JToken ParseApiResponse(string rawText)
{
    var jArray = new JArray();
    // 匹配item[索引].属性 格式的正则
    var regex = new Regex(@"item\[(\d+)\]\.(\w+)", RegexOptions.Compiled);
    // 按换行拆分所有行,过滤空行
    var lines = rawText.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
    
    foreach (var line in lines)
    {
        // 仅拆分第一个=,避免值内包含等号出错
        var splitIndex = line.IndexOf('=');
        if (splitIndex < 0) continue;
        
        var keyPart = line.Substring(0, splitIndex).Trim();
        var valuePart = line.Substring(splitIndex + 1).Trim();
        
        var match = regex.Match(keyPart);
        if (!match.Success) continue;
        
        var index = int.Parse(match.Groups[1].Value);
        var propName = match.Groups[2].Value;
        
        // 数组长度不足则补位
        while (jArray.Count <= index)
        {
            jArray.Add(new JObject());
        }
        
        // 给对应对象赋值
        (jArray[index] as JObject)[propName] = valuePart;
    }
    
    return jArray;
}

使用示例

string rawResponse = "item[0].Name=name\r\nitem[0].Type=type\r\nitem[1].Name=name\r\nitem[1].Type=type";
var result = ParseApiResponse(rawResponse);
// 输出JSON
string json = result.ToString();
// 转强类型对象,只需要定义对应结构的C#类即可
// List<YourCustomClass> obj = result.ToObject<List<YourCustomClass>>();

代码实现(基于System.Text.Json 原生)

using System.Text.Json.Nodes;
using System.Text.RegularExpressions;

public static JsonNode ParseApiResponse(string rawText)
{
    var jsonArray = new JsonArray();
    var regex = new Regex(@"item\[(\d+)\]\.(\w+)", RegexOptions.Compiled);
    var lines = rawText.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
    
    foreach (var line in lines)
    {
        var splitIndex = line.IndexOf('=');
        if (splitIndex < 0) continue;
        
        var keyPart = line.Substring(0, splitIndex).Trim();
        var valuePart = line.Substring(splitIndex + 1).Trim();
        
        var match = regex.Match(keyPart);
        if (!match.Success) continue;
        
        var index = int.Parse(match.Groups[1].Value);
        var propName = match.Groups[2].Value;
        
        while (jsonArray.Count <= index)
        {
            jsonArray.Add(new JsonObject());
        }
        
        jsonArray[index][propName] = valuePart;
    }
    
    return jsonArray;
}

扩展说明

  • 适配多结构接口:解析逻辑完全通用,不同返回结构的接口仅需要定义对应属性的C#类,调用反序列化方法即可完成映射,不需要修改解析代码
  • 特殊场景兼容:如果后续接口返回嵌套属性(如item[0].ExtInfo.Id=123),仅需要扩展键路径的解析逻辑即可适配
  • 类型转换:如果需要把值转为int、bool等类型,可以在赋值前加类型判断逻辑,根据业务需求自行扩展即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:05