Modo integrato di lavorare con JSON in Unity Code

JSON (JavaScript Object Notation) è un formato di interscambio di dati ampiamente utilizzato e la sua integrazione in Unity può essere potente per gestire configurazioni, salvare i progressi di gioco o scambiare dati con servizi esterni. Questa guida illustra le nozioni fondamentali per lavorare con JSON in Unity.

Passaggio 1: comprendere JSON

JSON è costituito da coppie chiave-valore e strutture nidificate.

Passaggio 2: lavorare con JSON nel codice Unity

Unity semplifica la serializzazione e la deserializzazione JSON tramite la classe 'JsonUtility'. Questa guida illustra i passaggi di base per lavorare con JSON in Unity senza librerie esterne.

  • Crea una struttura JSON:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Serializzazione: conversione di oggetti C# in JSON:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class SerializationExample : MonoBehaviour
{
    void Start()
    {
        PlayerData playerData = new PlayerData
        {
            playerName = "John Doe",
            playerLevel = 5,
            inventory = new string[] { "sword", "shield" }
        };

        string json = JsonUtility.ToJson(playerData);
        Debug.Log(json);
    }
}
  • Deserializzazione: conversione di JSON in oggetto C#:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class DeserializationExample : MonoBehaviour
{
    void Start()
    {
        string jsonData = "{\"playerName\":\"John Doe\",\"playerLevel\":5,\"inventory\":[\"sword\",\"shield\"]}";
        PlayerData playerData = JsonUtility.FromJson<PlayerData>(jsonData);

        Debug.Log($"Name: {playerData.playerName}, Level: {playerData.playerLevel}");
        Debug.Log("Inventory: " + string.Join(", ", playerData.inventory));
    }
}

Limitazioni note

'JsonUtility' non supporta direttamente la serializzazione e la deserializzazione di array di oggetti di primo livello (ad esempio, '[{},{},{}]') senza una classe di wrapper. Per risolvere questo problema, puoi utilizzare una classe helper per racchiudere l'array. Ecco un esempio:

using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
}

[System.Serializable]
public class PlayerDataArrayWrapper
{
    public PlayerData[] players;
}

public class TopLevelArrayExample : MonoBehaviour
{
    void Start()
    {
        // Serialization: Converting C# Object Array to JSON
        PlayerData[] players = new PlayerData[]
        {
            new PlayerData { playerName = "John Doe", playerLevel = 5 },
            new PlayerData { playerName = "Jane Smith", playerLevel = 8 }
        };

        PlayerDataArrayWrapper wrapper = new PlayerDataArrayWrapper { players = players };
        string json = JsonUtility.ToJson(wrapper);
        Debug.Log(json);

        // Deserialization: Converting JSON to C# Object Array
        string jsonData = "{\"players\":[{\"playerName\":\"John Doe\",\"playerLevel\":5},{\"playerName\":\"Jane Smith\",\"playerLevel\":8}]}";
        PlayerDataArrayWrapper deserializedData = JsonUtility.FromJson<PlayerDataArrayWrapper>(jsonData);

        foreach (var player in deserializedData.players)
        {
            Debug.Log($"Name: {player.playerName}, Level: {player.playerLevel}");
        }
    }
}

Nell'esempio precedente, la classe 'PlayerDataArrayWrapper' viene utilizzata per racchiudere l'array durante la serializzazione e la deserializzazione. È una pratica comune creare tali classi wrapper quando si ha a che fare con array di oggetti di primo livello in 'JsonUtility'.

Conclusione

'JsonUtility' semplifica la serializzazione e la deserializzazione JSON direttamente senza librerie esterne. Utilizza questo approccio nativo per operazioni JSON semplici nei progetti Unity.

Articoli suggeriti
Lavorare con matrici ed elenchi in codice Unity
Lavorare con le stringhe e manipolare i dati di testo in Unity
Creazione di un GrabPack in Unity ispirato a Poppy Playtime
Creare un gioco ispirato a Pac-Man in Unity
Interagire con gli oggetti in Unity Game
Crea oggetti con script in Unity
Unity Come creare uno shader