如何通过JSON将数据从Firebase检索到Unity3d?

如何通过JSON将数据从Firebase检索到Unity3d?,unity3d,firebase-realtime-database,Unity3d,Firebase Realtime Database,我希望我能把我的问题说得尽可能清楚。 基本上 我的FirebaseDatabase中保存了数百个项目的列表 我将数据转换为JSON 现在我想使用JSON并将所有数据应用到unity场景中的不同项目中 我已经尝试读取firebase子部分中的所有节点/项,并且我还声明了“foreach”方法来处理它所面对的每个子部分。但是,当我想在“foreach”方法中调用另一个类或函数时,它不起作用,我不知道为什么它不起作用 我真的很感激任何帮助或想法来实现它。 如果可能的话,我希望创建一个“foreach”

我希望我能把我的问题说得尽可能清楚。 基本上

我的FirebaseDatabase中保存了数百个项目的列表

我将数据转换为JSON

现在我想使用JSON并将所有数据应用到unity场景中的不同项目中

我已经尝试读取firebase子部分中的所有节点/项,并且我还声明了“foreach”方法来处理它所面对的每个子部分。但是,当我想在“foreach”方法中调用另一个类或函数时,它不起作用,我不知道为什么它不起作用

我真的很感激任何帮助或想法来实现它。 如果可能的话,我希望创建一个“foreach”方法,并以不同的方式处理每个项,因为键不同,JSON中每个项的值也不同


Player.Child(UserId).Child("User_Inventory").Child("Items").GetValueAsync().ContinueWith(task => {
            if (task.IsFaulted)
            {
                // Handle the error...
                Debug.LogError("Could not finish (LoadPlayerData) !!");
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;

                      // here is the data for all the items that I have

                    string JSON = snapshot.GetRawJsonValue();

               // Now How can I deal with each key/item present in the JSON?

       ```
[更新]
您可以直接迭代快照的子对象,而不是将firebase数据转换为RawJson并尝试迭代JSON对象。您可以以相同的方式遍历子对象的子对象

if(task.IsCompleted)
{
    DataSnapshot snapshot = task.Result;
    foreach (DataSnapshot child in snapshot.Children)
    {
        string key = child.Key;
        string value = child.Value;
        //Process child here.
    }
}
更新: 试着让你的孩子更容易管理

Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (DataSnapshot child in snapshot.Children)
{
    dict.Add(child.Key, child.Value);
}
//dict now contains all of your json children as a dictionary reference.

您可以直接迭代快照的子对象,而不是将firebase数据转换为RawJson并尝试迭代JSON对象。您可以以相同的方式遍历子对象的子对象

if(task.IsCompleted)
{
    DataSnapshot snapshot = task.Result;
    foreach (DataSnapshot child in snapshot.Children)
    {
        string key = child.Key;
        string value = child.Value;
        //Process child here.
    }
}
更新: 试着让你的孩子更容易管理

Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (DataSnapshot child in snapshot.Children)
{
    dict.Add(child.Key, child.Value);
}
//dict now contains all of your json children as a dictionary reference.

你好,谢谢Erik的回复。我已经这样做了,并且毫无问题地获得了子键和值,但是如果我尝试将子键和值传递给另一个类,则不会发生这种情况!如果我们试图以字符串形式获取'child.value',它会给出一个错误,因为'value'被认为是一个对象。[无法将类型“object”隐式转换为“string]抱歉,我在这里的帖子假设您正在分析底层节点。如果您的子节点不是底层节点,则需要将其解析为JSON对象或字典来读取。实际上,我正在尝试获取底层节点,但我遇到了我提到的那些问题,我无法传递数据。我认为在像“foreach”这样的迭代器中,我们不能调用另一个函数?!假设我有一个子项,其值为integer,我将把每个子项实例化为一个预置项或我的unity中的任何东西,并获取该项的键和值,为此我使用迭代器。这是我的任务,我只需要努力获取物品的int值。我还尝试了int myValue=int Child.value;还是什么都没发生!你好,谢谢Erik的回复。我已经这样做了,并且毫无问题地获得了子键和值,但是如果我尝试将子键和值传递给另一个类,则不会发生这种情况!如果我们试图以字符串形式获取'child.value',它会给出一个错误,因为'value'被认为是一个对象。[无法将类型“object”隐式转换为“string]抱歉,我在这里的帖子假设您正在分析底层节点。如果您的子节点不是底层节点,则需要将其解析为JSON对象或字典来读取。实际上,我正在尝试获取底层节点,但我遇到了我提到的那些问题,我无法传递数据。我认为在像“foreach”这样的迭代器中,我们不能调用另一个函数?!假设我有一个子项,其值为integer,我将把每个子项实例化为一个预置项或我的unity中的任何东西,并获取该项的键和值,为此我使用迭代器。这是我的任务,我只需要努力获取物品的int值。我还尝试了int myValue=int Child.value;还是什么都没发生!