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

Unity如何通过URL读取PHP返回的JSON字符串?

Unity解析PHP返回JSON失败的解决方案

核心问题排查

  1. 错误处理JSON字符串:www.downloadHandler.text已经是PHP返回的合法JSON字符串,你调用JsonUtility.ToJson()反而会把它转成带转义的嵌套字符串,直接导致后续解析失效。
  2. 序列化类不符合要求:Unity的JsonUtility只序列化公共字段,不支持自动属性(get; set;);另外PHP返回的JSON外层是包含status的对象,你直接用Status类解析,结构完全不匹配。
  3. 字段引用错误:代码里打印loaded.connection,但Status类根本没有这个字段,属于笔误。

修正后的Unity代码

void Start()
{
    StartCoroutine(GetInfo());
}

[System.Serializable]
public class JsonDataClass
{
    public Status status; // 改用公共字段,不要用自动属性
}

[System.Serializable]
public class Status
{
    public string health;
    public string speed;
    public bool boolean; // 字段名必须和PHP返回的JSON键完全一致
}

private IEnumerator GetInfo()
{
    using (UnityWebRequest www = UnityWebRequest.Get("https://example.com/example.php"))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            string rawJson = www.downloadHandler.text;
            Debug.Log("原始返回JSON: " + rawJson);

            // 先解析外层的JsonDataClass,再取出Status对象
            JsonDataClass loadedData = JsonUtility.FromJson<JsonDataClass>(rawJson);
            
            Status status = loadedData.status;
            Debug.Log("Health: " + status.health);
            Debug.Log("Speed: " + status.speed);
            Debug.Log("Boolean: " + status.boolean);
        }
    }
}

PHP代码优化建议

当前生成的JSON结构没问题,但建议明确指定返回类型,同时去掉不必要的格式化(生产环境减少传输体积):

<?php
header('Content-Type: application/json'); // 告诉Unity这是JSON格式数据
$results['status'] = array(
    'health' => '0',
    'speed' => '0',
    'boolean' => false
);
$json = json_encode($results, JSON_FORCE_OBJECT | JSON_THROW_ON_ERROR);
echo $json;
?>

额外验证点

  • 确保PHP服务器没有返回额外空白字符(比如PHP标签前后的空格),这会破坏JSON结构。
  • 如果解析后仍为空,可以尝试用JsonUtility.FromJsonOverwrite(rawJson, loadedData)替代FromJson,避免类构造函数的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:55:42