Получить данные из базы данных Firebase во вложенный словарь - PullRequest
0 голосов
/ 15 ноября 2018

У меня много проблем при попытке извлечь данные из базы данных Firebase и переместить эти данные в словарь Unity.

Так что я хотел бы сделать это, чтобы просто получить данные один раз изатем поместите все данные в словарь, проблема в том, что я не могу найти способ сделать это, если словарь является вложенным словарем.

Вот так выглядит моя база данных (упрощенно):

    {"questions": {
    "group1": {
        "id_1": {
          "Question": "question one",
          "A": "answer1"
        },
        "id_2": {
          "Question": "question two",
          "A": "answer2"
        }
      }
  }
    }

Итак, в моем коде я делаю следующее:

public void RetrievePreguntesJson()
{
    string group = "group1"
    questions_ref.Child(group).GetValueAsync().ContinueWith(task => {
        if (task.IsFaulted)
        {
            Debug.LogError("Error Getting Info from user database");
        }
        else if (task.IsCompleted)
        {
            DataSnapshot snapshot = task.Result;
            myDictionary = snapshot.Value as Dictionary<string, object>;
            dataReady();
        }
    });
}

Итак, проблема в том, что я не могу получить никакого значения.Я хотел бы сделать что-то вроде myDictionary["id_1"]["Question"] и получить значение «вопрос один».Или myDictionary["id_1"].Question и получите значение «вопрос один».

Я уже пробовал следующее: - Создайте вопросы класса, подобные этому:

public class Questions
{
    public string id;
    public string Question;
    public string Answer;

    public Questions(string id, string Question, string Answer)
    {
        this.id = id;
        this.Question = Question;
        this.Answer = Answer;
    }
}

И используйте следующий код вместо "userInfoDictionary = snapshot.Value as Dictionary<string, object>;"

Использование:

Questions ClassObjectName = JsonUtility.FromJson<Questions>(snapshot.GetRawJsonValue());

Но это тоже не сработало.

Также пробовал:

"userInfoDictionary = snapshot.Value as Dictionary<string, Dictionary<string, object>>;"

Но это не будетработать либо.

Может кто-нибудь помочь мне, пожалуйста?

"РЕДАКТИРОВАТЬ"

Это мой JSON:

{"questions": {
    "group1": {
        "id_1": {
          "Question": "question one",
          "A": "answer1"
        },
        "id_2": {
          "Question": "question two",
          "A": "answer2"
        }
      }
  }
    }

И это объекты:

[System.Serializable]
public class Group1
{
    public QuestionsId group1;
}
[System.Serializable]
public class QuestionsId
{
    public Questions id;
}
[System.Serializable]
public class Questions
{
    public string Question;
    public string A;
}

Я десериализовываю Json с помощью:

Group1 ClassObjectName = JsonUtility.FromJson<Group1>(snapshot.GetRawJsonValue());

Я хотел бы получить результат, вызывающий такие значения: myDictionary["id_1"].Question myDictionary["id_1"]["Question"]

Я сейчас использую объект и утилиту Json, но если есть возможность использовать словарь для единства, чтобы получить результат, который я хотел бы получить, то это тоже хорошо для меня.Например: "userInfoDictionary = snapshot.Value as Dictionary<string, object>;"

Кто-нибудь знает, как мне помочь, пожалуйста?

1 Ответ

0 голосов
/ 16 ноября 2018

Если у кого-то есть такая же проблема. Я обнаружил, что делать то, что я искал, - это то, что JsonUtility из unity не может сделать это, потому что он просто работает с ключами, которые знают, как вы всегда должны создавать свои объекты как классы в единстве. Так, если, например, у моего json есть ключ «id_3», он не будет работать, потому что мои объекты имеют только «id_1» и «id_2». Единственный способ создать неопределенное количество идентификаторов - это сделать их массивами (чего я не хочу в этом случае), потому что это заставит вас называть словарь примерно так: myDictionary[0]["Question"] Но в любом случае, просто если кому-то это нужно, Json должен быть таким, чтобы работать с JsonUtility (установка идентификаторов в виде массива):

{"questions": {
    "group1": [
               {
                 "Question": "question one",
                 "A": "answer1"
               },
               {
                 "Question": "question two",
                 "A": "answer2"
               }
              ]
          }
 }

Ну, так как это не то, что я искал, самый простой способ, который я нашел, это использовать библиотеку SimpleJson, которая делает именно то, что я ожидал, и она очень проста в использовании, без необходимости создавать свои собственные объекты в единстве С обычным файлом Json, полученным из снимка базы данных:

{"questions": {
        "group1": {
            "id_1": {
              "Question": "question one",
              "A": "answer1"
            },
            "id_2": {
              "Question": "question two",
              "A": "answer2"
            }
          }
       }
     }

Вам просто нужно сделать следующее:

var N = JSON.Parse(snapshot.GetRawJsonValue());
Debug.Log("N---> " + N["id_1"].ToString());

Так что он делает именно то, что я ожидал. Плохо то, что это внешняя библиотека, поэтому могут возникнуть некоторые проблемы в единстве, например, попытка использовать syncVars с этими данными.

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