Десериализовать JSON из REST InfluxDB в Unity3d с помощью UnityEngine.JsonUtility - PullRequest
0 голосов
/ 25 октября 2019

У меня проблемы с десериализацией ответа JSON от influenxDB в C # с использованием класса JsonUtility в Unity3d.

Я использовал json2csharp.com для создания своего класса. Кажется, проблема в том, что в результирующей строке JSON есть список со списком объектов.

Это пример результата JSON из InfluxDB:

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}

И это сгенерированныйкласс из json2csharp:

public class Series
{
    public string name { get; set; }
    public List<string> columns { get; set; }
    public List<List<object>> values { get; set; }
}

public class Result
{
    public int statement_id { get; set; }
    public List<Series> series { get; set; }
}

public class RootObject
{
    public List<Result> results { get; set; }
}

Я просто не могу понять, как обрабатывать List<List<object>> в поле значений.

При запуске программы я получаю этот вывод журнала (этоне пример JSON, а фактический результат из моей БД, но форматирование такое же):

InfluxResult (
    (List`1) results = List`1<Result> [
        Result (
            (Int32) statement_id = 0;
            (List`1) series = List`1<Series> [
                Series (
                    (String) name = "gf_hallway_temperature";
                    (List`1) columns = List`1<String> [
                        "time",
                        "value",
                    ];
                    (List`1) values = Null;
                ),
            ];
        ),
    ];
)

Если я делаю, он разбирает на один уровень глубже:просто анализирует значения как список пустых объектов. Но они соответствуют правильному количеству списка «наборов значений».

Я - разработчик уровня хобби, поэтому я мог бы пропустить что-то фундаментальное здесь. Я предполагаю, что генератор json2csharp не работает из-за вложенных списков? Но как это сделать, возможно ли это с UnityEngine.JsonUtility? Кроме того, «набор значений» варьируется в зависимости от того, как настроена БД, поэтому список столбцов представляет список значений и тип каждого поля в строке в ряду, если Im имеет какой-то смысл, так что я предполагаю, что должны быть некоторыесвоего рода общий объект, и я буду решать проблемы, которые возникают позже.

1 Ответ

0 голосов
/ 28 октября 2019
[
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]

не может быть десериализовано JSONUtility. Вместо этого используйте выделенную библиотеку, например, Newtonsoft JSON, для итераций по «объекту Json».

...