Unity json parse error invalid value

Ответили на вопрос 1 человек. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

Мужики, выручайте неумного, столкнулся с проблемой, что, отправляю 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. гуглить пробовал, со структурой игрался

Выводится ошибка:
ArgumentException: JSON parse error: Invalid value.
UnityEngine.JsonUtility.FromJson (System.String json, System.Type type) (at C:/buildslave/unity/build/Modules/JSONSerialize/Public/JsonUtility.bindings.cs:42)
UnityEngine.JsonUtility.FromJson[T] (System.String json) (at C:/buildslave/unity/build/Modules/JSONSerialize/Public/JsonUtility.bindings.cs:30)
SocketController+<GetRequest>d__5.MoveNext () (at Assets/Scripts/SocketController.cs:77)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs:17)

Возникает в скрипте:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
 
 
public class SocketController : MonoBehaviour
{
 
 
    [SerializeField]
    PlayerController player;
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(GetRequest("http://plantgo.ru:5000"));
 
 
    }
 
    private void Awake()
    {
        //socket.url = "ws://127.0.0.1:5000/socket.io/?EIO=4&transport=websocket";
 
    }
    // Update is called once per frame
    void Update()
    {
    }
    //private IEnumerator Connector()
    //{
    //   while (true)
    // {
    //   socket.Emit("movement");
 
    // yield return new WaitForSeconds(0.10f);
 
    //       }
    // wait 1 seconds and continue
 
 
 
 
    //    }
    class PlayerInfo
    {
        public string id;
        public string x;
        public string z;
    }
 
    IEnumerator GetRequest(string uri)
    {
        while (true)
        {
            using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
            {
                // Request and wait for the desired page.
                yield return webRequest.SendWebRequest();
 
                string[] pages = uri.Split('/');
                int page = pages.Length - 1;
 
                if (webRequest.isNetworkError)
                {
                    Debug.Log(pages[page] + ": Error: " + webRequest.error);
                }
                else
                {
                    Debug.Log(pages[page] + ":nReceived: " + webRequest.downloadHandler.text);
                    if (webRequest.downloadHandler.text == "no")
                    {
                        continue;
                    }
                    else
                    {
                        PlayerInfo playerInfo = (PlayerInfo)JsonUtility.FromJson<PlayerInfo>(webRequest.downloadHandler.text);
                        Debug.Log(playerInfo);
                        player.PlayerMove(float.Parse(playerInfo.x), float.Parse(playerInfo.z));
                    }
                }
 
            }
            //yield return new WaitForSeconds(0.1f);
        }
    }
 
 
 
 
 
 
}

Добавлено через 3 часа 7 минут
Судя по всему, дело в этой строчке:

C#
1
PlayerInfo playerInfo = (PlayerInfo)JsonUtility.FromJson<PlayerInfo>(webRequest.downloadHandler.text);

Но не могу понять в чем именно

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Локализация Json

Сделал локализацию игры на разные языки через json файлы — русский, англ, французский, немецкий, испанский, китайский и т.д.
И в редакторе на компьютере замечательно работает, но на андроиде работает только русский и английский язык.
Язык переключается с помощью кнопки, соответствующей конкретному языку.
В чем может быть подвох? Не сталкивался ли кто?

egorych8
UNIт
 
Сообщения: 71
Зарегистрирован: 28 июл 2020, 16:06

Re: Локализация Json

Сообщение DbIMok 01 июн 2021, 21:27

что в логах?

Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6321
Зарегистрирован: 31 июл 2009, 14:05

Re: Локализация Json

Сообщение egorych8 02 июн 2021, 15:09

DbIMok писал(а):что в логах?

А где посмотреть?

egorych8
UNIт
 
Сообщения: 71
Зарегистрирован: 28 июл 2020, 16:06

Re: Локализация Json

Сообщение DbIMok 03 июн 2021, 16:18

Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6321
Зарегистрирован: 31 июл 2009, 14:05

Re: Локализация Json

Сообщение egorych8 11 июн 2021, 17:52

В редакторе на ПК все работает, а на андроиде вот такое выдает в консоли

egorych8
UNIт
 
Сообщения: 71
Зарегистрирован: 28 июл 2020, 16:06

Re: Локализация Json

Сообщение DbIMok 11 июн 2021, 21:33

скорее всего причина в том что json содержит BOM
надо или пересохранить файл без него (обычно текстовые редакторы дают возможность выбора)
или удалять его в массиве байт перед тем как скормить json парсеру через StringReader

Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6321
Зарегистрирован: 31 июл 2009, 14:05

Re: Локализация Json

Сообщение egorych8 12 июн 2021, 10:41

DbIMok писал(а):скорее всего причина в том что json содержит BOM
надо или пересохранить файл без него (обычно текстовые редакторы дают возможность выбора)
или удалять его в массиве байт перед тем как скормить json парсеру через StringReader

Да, действительно кодировка была UTF с BOM в тех файлах, которые не работали на андроиде. Убрал и сразу заработало. Спасибо)

egorych8
UNIт
 
Сообщения: 71
Зарегистрирован: 28 июл 2020, 16:06


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24



Понравилась статья? Поделить с друзьями:
  • Unity install error visual studio
  • Unity error failed to resolve project template
  • Unity error cs0201
  • Unity error cs0116 a namespace cannot directly contain members such as fields or methods
  • Unity error cs0106 the modifier public is not valid for this item