Как организовать данные JSON, полученные с сервера? - PullRequest
0 голосов
/ 02 июня 2019

Я подаю заявку в единстве, которая соединяется с базой данных, и мне нужно систематизировать полученную из нее информацию, я использую следующий коруотин для получения информации:

private IEnumerator GetUsers(string url)
{

    using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
    {
        // Request and wait for the desired page.
        yield return webRequest.SendWebRequest();

        if (webRequest.isNetworkError)
        {
            Debug.Log(": Error: " + webRequest.error);
        }
        else
        {
            Debug.log("DATA:\n" + webRequest.downloadHandler.text);
        }
    }
}

, а затем я бынапример, данные, которые я получаю (имена, фамилии, код, пароль и т. д.), чтобы организовать их для печати или последующего использования в зависимости от того, что мне нужно, большое спасибо заранее.

и попробовалиспользовать сериализуемый класс для сохранения моих данных, но я работаю только с одним (и когда с моими собственными данными не с сервера), я также пытался создать вектор типа людей для сохранения более чем одной информации, и это неработать либо: C или, вернее, я не знал, как заставить его работать

[System.Serializable]
public class People 
{
    public string names, surnames, cedula, password, telephone, address, code, 
    email;
}

[System.Serializable]
public class PeopleList
{
    public People[] users;
}
public class GetSendDate : MonoBehaviour
{
   private IEnumerator GetUsers(string url)
    {

        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
            // Request and wait for the desired page.
            yield return webRequest.SendWebRequest();

            if (webRequest.isNetworkError)
            {
                Debug.Log(": Error: " + webRequest.error);
            }
            else
            {
                PeopleList users = new People();

                string json = webRequest.downloadHandler.text;

                users = JsonUtility.FromJson<PeopleList>(json);

                Debug.Log(users.user[0].names);
                Debug.Log(users.user[0].surnames);
                Debug.Log(users.user[0].cod);

             }
        }
  }
}   

это ответ webRequest.downloadHandler.text

[{"userID": 1, "idRole": 1, "email": "ada@gmail.com", "password": "$ 2a $ 10 $ YVXachXCaPBj9vDo.d4itO4vghtCvSMfrmeHCGJqJ6rSneM / hJsPy", "names": "Juanota Rosadita" , "surnames": "sapoton", "cedula": "123", "telefono": "789", "direccion": "147", "code": "258"}, {"idUsuario": 7, " idRole ": 1," email ":" vic@gmail.com "," password ":" $ 2a $ 10 $ JA1rszAgVK52OnWoOWDXneQcVUHwWBi2Di9o2z7kMqrWPyrjGoTnO "," names ":" victor "," Surnames ":" giron "," cedula ":" 1085 "," telefono ":" 313 "," direccion ":" yoquese "," code ":" 217 "}, {" idUsuario ": 8," idRole ": 1," email ":" juanos @ gmail. com "," password ":" $ 2a $ 10 $ 6EAy2e7dXASx2MPDA3vtW.heYuM1wsaEtFmA4Lb6BD0RCTJvm / HSe "," names ":" Juanito "," Surnames ":" Alcachofa "," cedula ":" 789 "," telefono ":" 31358964 " , "address": "123", "code": "753"}]

Я получаю следующую ошибку, когда язапустите функцию в единице:

ArgumentException: JSON должен представлять тип объекта.UnityEngine.JsonUtility.FromJson (System.String json, тип System.Type) (в C: /buildslave/unity/build/Modules/JSONSerialize/Public/JsonUtility.bindings.cs: 42) UnityEngine.JsonUtility.FromJson [T] (System.String json) (в C: /buildslave/unity/build/Modules/JSONSerialize/Public/JsonUtility.bindings.cs: 30) GetSendDate + d__6.MoveNext () (в ресурсах / сценариях / GetSendDate.cs: 73) UnityEngine.SetupCoroutine.InvokeMoveNext (перечислитель System.Collections.IEnumerator, System.IntPtr returnValueAddress) (в C: /buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs: 17)

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вы можете использовать утилиту Newton Soft Json для парсинга.

Просто скачайте файл DLL и поместите его в папки Assets / Plugins. Вы можете скачать с: https://www.nuget.org/packages/Unity.Newtonsoft.Json/

using Newtonsoft.Json;

private IEnumerator GetUsers(string url)
    {

 using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {

        yield return webRequest.SendWebRequest();

            if (webRequest.isNetworkError)
            {
                Debug.Log(": Error: " + webRequest.error);
            }
             else if (m_Request.isHttpError)
            {
                Debug.Log(" Server Not Responding ");
            }
            else
            {
                var response = JObject.Parse(m_Request.downloadHandler.text);
                users = JsonConvert.DeserializeObject<PeopleList>(response.SelectToken("data"))
            }
        }
    }
0 голосов
/ 03 июня 2019

Можете ли вы отправить перехват "Debug.log" вашего ответа webRequest.downloadHandler.text?

Поскольку весьма вероятно, что вы пытаетесь преобразовать весь ответ, включая заголовок.вам нужно только преобразовать данные ответа в json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...