Indbygget måde at arbejde med JSON i Unity Code

JSON (JavaScript Object Notation) er et meget brugt dataudvekslingsformat, og at integrere det i Unity kan være effektivt til at håndtere konfigurationer, gemme spilfremskridt eller udveksle data med eksterne tjenester. Denne guide guider dig gennem det grundlæggende ved at arbejde med JSON i Unity.

Trin 1: Forstå JSON

JSON består af nøgleværdi-par og indlejrede strukturer.

Trin 2: Arbejde med JSON i Unity kode

Unity forenkler JSON-serialisering og deserialisering gennem sin 'JsonUtility' klasse. Denne vejledning viser de grundlæggende trin til at arbejde med JSON i Unity uden eksterne biblioteker.

  • Opret en JSON-struktur:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Serialisering - Konvertering af C#-objekt til 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);
    }
}
  • Deserialisering - Konvertering af JSON til C#-objekt:
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));
    }
}

Kendte begrænsninger

'JsonUtility' understøtter ikke direkte serialisering og deserialisering af arrays på øverste niveau af objekter (f.eks. '[{},{},{}]') uden en indpakningsklasse. For at omgå dette kan du bruge en hjælperklasse til at indpakke arrayet. Her er et eksempel:

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

I eksemplet ovenfor bruges 'PlayerDataArrayWrapper'-klassen til at ombryde arrayet ved serialisering og deserialisering. Det er almindelig praksis at oprette sådanne indpakningsklasser, når man håndterer rækker af objekter på øverste niveau i 'JsonUtility'.

Konklusion

'JsonUtility' forenkler JSON-serialisering og deserialisering direkte uden eksterne biblioteker. Brug denne indbyggede tilgang til ligetil JSON-operationer i Unity-projekter.

Foreslåede artikler
Arbejde med arrays og lister i Unity Code
Arbejde med strenge og manipulation af tekstdata i Unity
Håndtering af undtagelser og fejlhåndtering i Unity Code
Oprettelse af klasser og objekter i Unity Code
Oprettelse af betingede erklæringer (hvis-andet) i Unity Code
Sådan bliver du en bedre programmør i Unity
Kodning af et simpelt lagersystem med UI Drag and Drop i Unity