tentrun
@tentrun
Clown c# inside

Как обработать принятый JSON в unity — выбивает ошибку?

Мужики, выручайте неумного, столкнулся с проблемой, что, отправляю post request на сервер, сервер генерирует ключ, и присылает его в JSON, однако, сколько не гуглил, получаю ошибку.
Запускаю корутину
PostStruct user = new PostStruct()
        {
            Login = "test",
            Password = "test",
            key = "TestKey" // исходящий ключ по дефолту в принципе пустой
        };
 
        string json = JsonUtility.ToJson(user);
 
        //Debug.Log(json);
 
        UnityWebRequest request = UnityWebRequest.Post("https://" + serverURI + "/login.php", json);
 
        byte[] postBytes = Encoding.UTF8.GetBytes(json);
 
        UploadHandler uploadHandler = new UploadHandlerRaw(postBytes);
 
        request.uploadHandler = uploadHandler;
 
        request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
 
        yield return request.SendWebRequest();
 
        Debug.Log(request.downloadHandler.text);
 
        PostStruct postStructFromServer = JsonUtility.FromJson<PostStruct>(request.downloadHandler.text);


Вроде бы отсылается и присылается, но на последней сточке, где идет парсинг, выбивает
Код ошибки
ArgumentException: JSON parse error: Invalid value.
UnityEngine.JsonUtility.FromJson (System.String json, System.Type type) (at <bd9566cca22541e58ad28d1fa2849830>:0)
UnityEngine.JsonUtility.FromJson[T] (System.String json) (at <bd9566cca22541e58ad28d1fa2849830>:0)
AuthRequest+<SendRequest>d__3.MoveNext () (at Assets/Auth/Scripts/AuthRequest.cs:58)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <04258d1cdc1044248c2a17a6a31a3cf7>:0)

Но в дебаг логе показывает, что ответ то пришел, чо оно не парсит то, памагите

Array
(
    [Login] => test
    [Password] => test
    [key] => TestKey
)
{"Login":"test","Password":"test","key":"kKCsDu836n"}
UnityEngine.Debug:Log(Object)
<SendRequest>d__3:MoveNext() (at Assets/Auth/Scripts/AuthRequest.cs:56)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

p.s. гуглить пробовал, со структурой игрался
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
Не знаю, что у вас там и как настроено, но вот пример кода для получения ключа через POST в Unity. Может прольёт свет:
print("Requesting new TOKEN...");
        
        var content = new WWWForm();
        content.AddField("grant_type", "client_credentials");
        content.AddField("client_id", clientId);
        content.AddField("client_secret", clientSecret);

        using(var webRequest = UnityWebRequest.Post(tokenUri, content))
        {
            yield return webRequest.SendWebRequest();
            if(webRequest.isHttpError || webRequest.isNetworkError)
            {
                Debug.Log("Error: " + webRequest.error);
                result("");
            }
            else
            {
                var jsonString = webRequest.downloadHandler.text;
                var json = JsonUtility.FromJson<TokenClassName>(jsonString);
                result(json.access_token);
                print("New TOKEN received");
            }
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы