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

C# .NET4.7中无Schema JSON的字符串转JSON数组问题

解决方案(用Newtonsoft.Json处理动态JSON)

因为无法映射固定C#对象,直接使用Newtonsoft.Json.Linq中的JObject动态操作JSON是最优方案,.NET 4.7完全兼容该库(需通过NuGet安装Newtonsoft.Json包)。

实现步骤

  • 将原始JSON加载为JObject,实现无Schema的动态字段访问
  • 提取items字段的字符串值,按|和^的规则分割为二维字符串数组
  • 将分割后的数组包装为JArray,替换原items字段
  • 序列化回JSON字符串,得到真正的数组结构

代码示例

using Newtonsoft.Json.Linq;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // 示例原始JSON(含动态字段)
        string originalJson = @"
        {
            ""randomField1"": ""demo"",
            ""items"": ""apple^red|banana^yellow|orange^orange"",
            ""randomField2"": 456
        }";

        // 1. 加载JSON为JObject
        JObject jsonObj = JObject.Parse(originalJson);

        // 2. 检查并提取items字段的字符串值
        if (jsonObj["items"] is JValue itemsValue && itemsValue.Type == JTokenType.String)
        {
            string itemsStr = itemsValue.Value<string>();
            
            // 3. 按规则分割成二维数组:先按|拆分外层元素,再按^拆分内层元素
            string[][] itemsArray = itemsStr.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(outerItem => outerItem.Split(new[] { '^' }, StringSplitOptions.RemoveEmptyEntries))
                .ToArray();

            // 4. 将二维数组转为JArray,替换原items字段
            jsonObj["items"] = JArray.FromObject(itemsArray);
        }

        // 5. 序列化回JSON字符串,此时items为标准JSON数组
        string processedJson = jsonObj.ToString();
        Console.WriteLine(processedJson);
    }
}

关键说明

  • StringSplitOptions.RemoveEmptyEntries用于过滤分割产生的空元素(比如首尾分隔符、连续分隔符的情况),如果需要保留空元素可移除该参数
  • 使用JObject操作不会破坏JSON中的其他动态字段,仅修改items字段
  • 最终输出的items是真正的JSON数组结构,而非字符串形式的数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:02:40