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

Unity C#游戏中如何解析服务器返回的换行分隔JSON?

解析换行分隔JSON(NDJSON)的Unity C#方案

当然可以!在Unity开发中处理这种换行分隔的JSON(也就是NDJSON格式)非常常见,我给你分享两种实用的实现方式,都是项目里验证过的:

1. 使用Unity内置的JsonUtility解析

首先你需要先定义一个和JSON结构匹配的C#类:

[System.Serializable]
public class PlayerGameState
{
    public string gamestate;
    public int score;
    public string compare;
    public string compitPosition; // 注意字段名要和JSON里的完全一致
}

然后处理服务器返回的NDJSON字符串:

public void ParseNDJSON(string ndjsonResponse)
{
    // 按换行符分割字符串,兼容Windows(\r\n)和Linux(\n)的换行格式
    string[] jsonLines = ndjsonResponse.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (string jsonLine in jsonLines)
    {
        try
        {
            // 逐个解析每行的JSON对象
            PlayerGameState state = JsonUtility.FromJson<PlayerGameState>(jsonLine);
            
            // 这里就可以使用解析后的state对象了,比如打印测试
            Debug.Log($"游戏状态:{state.gamestate},分数:{state.score},排名:{state.compitPosition}");
        }
        catch (System.Exception e)
        {
            Debug.LogError($"解析JSON行失败:{jsonLine},错误信息:{e.Message}");
        }
    }
}

2. 使用Newtonsoft.Json(更灵活的方案)

如果你的项目里已经引入了Newtonsoft.Json(可以通过Unity Package Manager安装com.unity.nuget.newtonsoft-json),这种方式对复杂JSON的支持更好:

先定义实体类(可以用JsonProperty映射字段,就算字段名大小写不一致也能处理):

public class PlayerGameState
{
    [JsonProperty("gamestate")]
    public string GameState { get; set; }
    
    [JsonProperty("score")]
    public int Score { get; set; }
    
    [JsonProperty("compare")]
    public string Compare { get; set; }
    
    [JsonProperty("compitPosition")]
    public string CompetitionPosition { get; set; }
}

然后编写解析代码:

using Newtonsoft.Json;

public void ParseNDJSONWithNewtonsoft(string ndjsonResponse)
{
    string[] jsonLines = ndjsonResponse.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (string jsonLine in jsonLines)
    {
        try
        {
            PlayerGameState state = JsonConvert.DeserializeObject<PlayerGameState>(jsonLine);
            Debug.Log($"游戏状态:{state.GameState},分数:{state.Score},排名:{state.CompetitionPosition}");
        }
        catch (JsonException e)
        {
            Debug.LogError($"解析JSON行失败:{jsonLine},错误信息:{e.Message}");
        }
    }
}

注意事项

  • 记得处理空行:用StringSplitOptions.RemoveEmptyEntries可以自动过滤掉分割后产生的空字符串,避免解析错误
  • 异常捕获:服务器返回的内容可能存在格式错误,加上异常处理可以防止程序崩溃
  • 如果是从网络获取NDJSON,建议在协程或者异步方法里处理,避免阻塞主线程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:16:17