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

C#如何从数据库字符串生成指定结构JSON?求解data数组构建方法

C#实现按Email+Link分组并生成指定JSON结构

这问题核心就是按Email和Link的组合做分组,把对应的Data项聚合到数组里,我给你写个完整的实现方案:

步骤拆解

  1. 解析原始字符串,拆分出每个条目的Email、Link、Data字段
  2. 按Email+Link的组合对条目分组
  3. 将分组结果序列化为目标JSON格式

完整代码示例

首先需要引入JSON序列化库,这里用常用的Newtonsoft.Json(也可以用.NET自带的System.Text.Json,代码稍作调整即可)。

1. 定义模型(可选,也可以用匿名类型)

如果需要强类型约束的话,可以先定义对应的类:

// 单个分组后的日志条目
public class LogItem
{
    public string email { get; set; }
    public string link { get; set; }
    public List<string> data { get; set; }
}

// 根对象
public class LogRoot
{
    public List<LogItem> log { get; set; }
}

2. 处理逻辑与序列化

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        // 原始输入数据
        string rawInput = "email1 link1 data1、email1 link1 data2、email1 link2 data3、email2 link3 data4";

        // 1. 拆分并解析每个条目
        var parsedEntries = rawInput.Split('、') // 按中文顿号拆分每个条目
                                    .Select(entry => 
                                    {
                                        // 按空格拆分每个条目里的字段
                                        var parts = entry.Split(' ', StringSplitOptions.RemoveEmptyEntries);
                                        // 加入格式验证,避免字段数量不对的情况
                                        if (parts.Length != 3)
                                        {
                                            throw new FormatException($"无效的条目格式:{entry}");
                                        }
                                        return new 
                                        {
                                            Email = parts[0],
                                            Link = parts[1],
                                            Data = parts[2]
                                        };
                                    });

        // 2. 按Email+Link组合分组,聚合Data到数组
        var groupedItems = parsedEntries.GroupBy(e => new { e.Email, e.Link })
                                        .Select(group => new LogItem
                                        {
                                            email = group.Key.Email,
                                            link = group.Key.Link,
                                            data = group.Select(item => item.Data).ToList()
                                        });

        // 3. 组装成目标结构并序列化为JSON
        var logRoot = new LogRoot { log = groupedItems.ToList() };
        string jsonResult = JsonConvert.SerializeObject(logRoot, Formatting.Indented);

        // 输出结果
        Console.WriteLine(jsonResult);
    }
}

关键说明

  • 分组逻辑:用GroupBy时,键选择匿名类型new { e.Email, e.Link },C#的匿名类型会自动按属性值进行相等比较,正好满足“相同Email+相同Link为一组”的需求。
  • 数据聚合:每个分组里通过group.Select(item => item.Data).ToList()把所有对应的Data收集成列表,序列化后就是JSON数组。
  • 格式验证:加入了对条目字段数量的检查,避免原始数据格式错误导致的索引越界异常。

运行这段代码后,输出的JSON就是你需要的结构:

{
  "log": [
    {
      "email": "email1",
      "link": "link1",
      "data": [
        "data1",
        "data2"
      ]
    },
    {
      "email": "email1",
      "link": "link2",
      "data": [
        "data3"
      ]
    },
    {
      "email": "email2",
      "link": "link3",
      "data": [
        "data4"
      ]
    }
  ]
}

内容的提问来源于stack exchange,提问作者Ирина Скорикова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:05