简体   繁体   English

来自服务器的 Unity json 数据返回 null

[英]Unity json data from server returns null

I have a problem, where Json data is taken from server and then called out, but always outputs NULL.我有一个问题,从服务器获取 Json 数据然后调用,但总是输出 NULL。 You can test code if you want to, Url is public.如果你愿意,你可以测试代码,Url 是公开的。

This is Json data that I get from server这是我从服务器获取的 Json 数据
[{"id":"3","question":"Cik ir 4 + 4 = ?","answer1":"3","answer2":"13","answer3":"7","answer4c":"8"}]
How do I fix this, so Json data outputs correctly?我该如何解决这个问题,以便正确输出 Json 数据?

Thank you.谢谢你。

using System.Collections;
using System.Collections.Generic;
using System.Net.Mime;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System;

public class Code : MonoBehaviour
{
    public Text first;
    public const string URLBase = "http://91.200.67.104:8080/test/json.php";

    [System.Serializable]
    public class Results
    {
        public string id;
        public string question;
        public string answer1;
        public string answer2;
        public string answer3;
        public string answer4c;
    }

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

    IEnumerator Run()
    {
        var req = CreateReturnPlayerDataRequest();
        yield return req.SendWebRequest();
        var results = HandleReturnPlayerDataRequest(req);
        first.text = results.id + "  dasdasdas  " + results.question;
    }

    public static UnityWebRequest CreateReturnPlayerDataRequest()
    {
        var req = UnityWebRequest.Get(URLBase);
        return req;
    }
    public static Results HandleReturnPlayerDataRequest(UnityWebRequest req)
    {
        if (req.isNetworkError)
        {
            Debug.LogError("Failed to POST /player/register");
            return new Results();
        }
        // Debug izvada datus console
        Debug.Log("{\"Results\":" + req.downloadHandler.text + "}");
        Results results = JsonUtility.FromJson<Results>("{\"Results\":" + req.downloadHandler.text + "}");
        Debug.Log("ID:" + results.id + "  ;question: " + results.question + "   ; " + results.answer1);
        Debug.Log(results.id);
        Debug.Log(results.question);
        Debug.Log(results.answer1);
        return results;
    }
}

Your deserialization class structure is incorrect.您的反序列化类结构不正确。

Firstly, the json data you are receiving from the server is an array/collection (it is surrounded by square brackets "[ ]").首先,您从服务器接收的 json 数据是一个数组/集合(它被方括号“[]”包围)。

Secondly, you are placing it in the "Results" field of a parent object.其次,您将其放置在父对象的“结果”字段中。

Therefore, this would be the correct structure:因此,这将是正确的结构:

[System.Serializable]
public class RootObject
{
    public List<Results> Results;
}

[System.Serializable]
public class Results
{
    public string id;
    public string question;
    public string answer1;
    public string answer2;
    public string answer3;
    public string answer4c;
}

Usage:用法:

var obj = JsonUtility.FromJson<RootObject>("{\"Results\":" + req.downloadHandler.text + "}");
Results serverData = obj.Results[0];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM