Как сделать список лидеров в единстве, используя результат JSON базы данных Firebase - PullRequest
0 голосов
/ 15 апреля 2020

Я использую unity3d и Firebase. Я могу отправить данные в базу данных, и я могу получить их, но я не знаю, как использовать их в проекте. Мне нужно преобразовать этот json файл в массив с именем и счетом, но я не могу его получить: (

{
    "Elisa" : {
      "name" : "Elisa",
      "score" : "53"
    },
    "Javi" : {
      "name" : "Javi",
      "score" : "12"
    },
    "Jon" : {
      "name" : "Jon",
      "score" : "33"
    }
}

И я использую этот класс

[Serializable]
public class Points
{
    public string name;
    public string score;



    public Points(string _name, string _score)
    {
        this.name = _name;
        this.score = _score;
    }
}

Если вы хотите посмотреть на мой код, это:

using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
using System;

public class DatabaseManager : MonoBehaviour
{

    DatabaseReference reference;
    // Start is called before the first frame update
    void Start()
    {
        // Set this before calling into the realtime database.
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://project-SecretCode.firebaseio.com/");

        // Get the root reference location of the database.
        reference = FirebaseDatabase.DefaultInstance.RootReference;

    }

    public void ButtonLoad()
    {

        ReadDataBase();
    }
    //leee toda lavase de daton en el apartado score
    [ContextMenu("ReadDataBase")]
    void ReadDataBase()
    {
        //reference
        FirebaseDatabase.DefaultInstance
       .GetReference("Score")
       // .GetReference("Score").Child("javi")

       .GetValueAsync().ContinueWith(task =>
        {
            if (task.IsFaulted)
            {
                // Handle the error...
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;
                //Debug.Log(snapshot.GetRawJsonValue());

                string jsonStr = snapshot.GetRawJsonValue(); //result Json To String
                Debug.Log(jsonStr);
            }
        });


    }
}
[Serializable]
public class Points
{
    public string name;
    public string score;



    public Points(string _name, string _score)
    {
        this.name = _name;
        this.score = _score;
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете преобразовать строку Json в объект Unity, используя JsonUtility.FromJson<T>:

Таким образом, добавив что-то похожее на эту функцию:

public static Points FromJSON(string jsonString)
{
    return JsonUtility.FromJson<Points>(jsonString);
}

  1. Похоже, вам нужно будет добавить класс для хранения массива, как в вашем коде он содержит для одного игрока:
class PointsArray {
    Points[] allPlayerPoints;
}
Ваш json в настоящее время является словарем с ключом: значением, должен иметь [ ], чтобы он был массивом. (и тогда вы не дублируете имя):
{
    [
        {
          "name" : "Elisa",
          "score" : "53"
        },
        {
          "name" : "Javi",
          "score" : "12"
        },
        {
          "name" : "Jon",
          "score" : "33"
        }
    ]
}
...