Ingebouwde manier van werken met JSON in Unity Code

JSON (JavaScript Object Notation) is een veelgebruikt formaat voor gegevensuitwisseling, en het integreren ervan in Unity kan krachtig zijn voor het verwerken van configuraties, het opslaan van spelvoortgang of het uitwisselen van gegevens met externe services. Deze handleiding leidt u door de basisbeginselen van het werken met JSON in Unity.

Stap 1: JSON begrijpen

JSON bestaat uit sleutel-waardeparen en geneste structuren.

Stap 2: Werken met JSON in Unity-code

Unity vereenvoudigt JSON-serialisatie en deserialisatie via de klasse 'JsonUtility'. Deze handleiding demonstreert de basisstappen om met JSON te werken in Unity zonder externe bibliotheken.

  • Maak een JSON-structuur:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Serialisatie - C#-object converteren naar 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);
    }
}
  • Deserialisatie - JSON converteren naar C#-object:
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));
    }
}

Bekende beperkingen

'JsonUtility' ondersteunt niet direct de serialisatie en deserialisatie van arrays van objecten op het hoogste niveau (bijvoorbeeld '[{},{},{}]') zonder een inpakklasse. Om dit te omzeilen, kunt u een helperklasse gebruiken om de array in te pakken. Hier is een voorbeeld:

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}");
        }
    }
}

In het bovenstaande voorbeeld wordt de klasse 'PlayerDataArrayWrapper' gebruikt om de array in te pakken bij het serialiseren en deserialiseren. Het is gebruikelijk om dergelijke wrapper-klassen te maken als je te maken hebt met arrays van objecten op het hoogste niveau in 'JsonUtility'.

Conclusie

'JsonUtility' vereenvoudigt JSON-serialisatie en deserialisatie rechtstreeks zonder externe bibliotheken. Gebruik deze native aanpak voor eenvoudige JSON-bewerkingen in Unity-projecten.

Voorgestelde artikelen
Een praktische benadering van modulaire code in eenheid
Afhandeling van uitzonderingen en foutafhandeling in Unity Code
Werken met arrays en lijsten in Unity Code
Lichtpistoolafvuurlogica in eenheid
Loops (For, While) gebruiken om de uitvoering van code te herhalen
Werken met tekenreeksen en tekstgegevens in eenheid manipuleren
Gids voor monogedrag in eenheid