尝试从Firebase数据库检索数据并将其移至统一字典时遇到很多问题。
所以我想这样做,只是一次检索数据,然后将所有数据放入字典中,问题是如果字典是嵌套字典,我找不到解决方法。
这是我的数据库的外观(简化):
{"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>;"
有人知道如何帮助我吗?
答案 0 :(得分:0)
如果有人遇到相同的问题。
我发现自己在做我一直在寻找的事情,那就是统一的JsonUtility无法做到,因为它只能与一个已知的键一起使用,因为您必须始终将对象作为统一的类来创建。
因此,例如,如果我的json具有“ id_3”键,则它将不起作用,因为我的对象只有“ id_1”和“ id_2”。能够创建不确定数量的Ids的唯一方法是将它们设置为数组(在这种情况下,我不希望这样做),因为这将使您将字典称为:myDictionary[0]["Question"]
但是无论如何,只要有人需要,Json就应该像这样与JsonUtility一起工作(将Ids设置为数组):
{"questions": {
"group1": [
{
"Question": "question one",
"A": "answer1"
},
{
"Question": "question two",
"A": "answer2"
}
]
}
}
好吧,因为这不是我想要的,所以我发现最简单的方法是使用SimpleJson库,该库完全符合我的预期,并且超级易于使用,而无需创建自己的对象团结一致。 从firebase的快照中获取普通的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。