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

Unity3D(C#)如何从单个JSON数组拆分出按ID分组的多个JSON数组?

按指定属性分组拆分JSON对象数组(Unity C#实现)

嘿,这个需求我之前做Unity项目处理传感器数据的时候刚好碰到过,其实用C#的LINQ结合Unity的JSON解析就能很优雅地搞定,我给你一步步拆解思路和实现:

1. 先定义对应JSON结构的C#类

直接操作JSON字符串太麻烦,我们先把JSON转成强类型的C#对象。根据你给的JSON示例,定义一个带序列化特性的类:

[System.Serializable]
public class LocationRecord
{
    public int ID;
    public long Datetime;
    public string Module;
    public float Latitude;
    public float Longitude;
    public float Speed;
}

注意:[System.Serializable]是给Unity自带的JsonUtility用的,确保字段名和JSON里的键完全一致(包括大小写),不然反序列化会丢失数据。

2. 将JSON数组反序列化为C#集合

把你的JSON字符串转成LocationRecord的数组或列表,方便后续操作:

// 假设你的原始JSON数组字符串存在jsonArrayString变量中
LocationRecord[] allRecordsArray = JsonUtility.FromJson<LocationRecord[]>(jsonArrayString);
List<LocationRecord> allRecordsList = new List<LocationRecord>(allRecordsArray);

如果你用的是Newtonsoft.Json(Unity包管理器可安装),反序列化代码会更灵活,比如:

// 需要先引入Newtonsoft.Json命名空间
List<LocationRecord> allRecordsList = JsonConvert.DeserializeObject<List<LocationRecord>>(jsonArrayString);

3. 用LINQ按指定属性分组(核心步骤)

C#的LINQ提供了GroupBy方法,可以一键按指定属性分组。记得先在代码顶部引入using System.Linq;:

// 按ID分组,得到一个分组集合,每个分组的Key是ID,Value是对应ID的所有记录
var groupedRecords = allRecordsList.GroupBy(record => record.ID);

4. 转换为你需要的格式

分组后你可以把结果转成字典、数组列表等格式,方便后续使用:

  • 转成字典(键为ID,值为对应记录数组):
Dictionary<int, LocationRecord[]> groupedDictionary = new Dictionary<int, LocationRecord[]>();
foreach (var group in groupedRecords)
{
    groupedDictionary[group.Key] = group.ToArray();
}
  • 转成列表的列表:
List<List<LocationRecord>> groupedLists = groupedRecords.Select(group => group.ToList()).ToList();

额外提示

  • 如果要按其他属性分组,比如Module,只需要把GroupBy的参数改成record => record.Module就行,非常灵活。
  • 如果JSON里有复杂嵌套结构,Unity自带的JsonUtility可能无法处理,这时候Newtonsoft.Json会是更好的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:31:46