Unity如何通过URL读取PHP返回的JSON字符串?
Unity解析PHP返回JSON失败的解决方案
核心问题排查
- 错误处理JSON字符串:
www.downloadHandler.text已经是PHP返回的合法JSON字符串,你调用JsonUtility.ToJson()反而会把它转成带转义的嵌套字符串,直接导致后续解析失效。 - 序列化类不符合要求:Unity的
JsonUtility只序列化公共字段,不支持自动属性(get; set;);另外PHP返回的JSON外层是包含status的对象,你直接用Status类解析,结构完全不匹配。 - 字段引用错误:代码里打印
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
相关产品推荐
相关产品推荐

