Menu
CoddyTech

JsonUtility

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 30 dari 64.

JSON adalah teks yang menyimpan nilai sebuah objek, sehingga teks ini dapat dicatat, dikirim, atau ditulis ke file. JsonUtility.ToJson(obj) mengubah objek menjadi JSON dan JsonUtility.FromJson<T>(json) membuat T baru darinya. JsonUtility mengikuti aturan yang digunakan Inspector, sehingga dapat digunakan pada class [System.Serializable]:

[System.Serializable]
public class PlayerProfile
{
    public string playerName = "Ana";
    public int level = 7;
    public List<string> badges = new List<string> { "Explorer", "Sharpshooter" };
    [SerializeField] private float hoursPlayed = 12.5f;
    private int secretCode = 1234;
    public int Rank { get; set; } = 3;
}
string json = JsonUtility.ToJson(new PlayerProfile());
// {"playerName":"Ana","level":7,"badges":["Explorer","Sharpshooter"],"hoursPlayed":12.5}
PlayerProfile copy = JsonUtility.FromJson<PlayerProfile>(json);

secretCode dan Rank tidak disertakan. JsonUtility menulis field publik dan field privat yang diberi tanda [SerializeField], dan tidak menulis yang lain: tidak ada property, field statis, atau field privat biasa. Field Dictionary juga dilewati, begitu pula field yang class-nya tidak memiliki [System.Serializable]. Inspector juga tidak menyertakan field-field tersebut. JsonUtility.ToJson(obj, true) menulis JSON yang sama dalam beberapa baris agar lebih mudah dibaca.

List di dalam class akan ditulis, seperti badges. List yang berdiri sendiri tidak akan ditulis: JsonUtility memerlukan objek di bagian teratas, jadi JsonUtility.ToJson(scores) untuk List<int> berisi 10, 20, dan 30 menghasilkan {}. Masukkan list ke dalam class lalu ubah class itu. ScoreBoard yang menyimpan list yang sama akan ditulis sebagai {"scores":[10,20,30]}:

[System.Serializable]
public class ScoreBoard
{
    public List<int> scores;
}
challenge icon

Tantangan

Sedang

Bagikan tim sebagai kode JSON.

  1. Di CharacterBuild, jadikan Strength sebuah field, public int strength;, dan tandai agility dengan [SerializeField].
  2. Di bawahnya, tulis class Team dengan [System.Serializable] dan public List<CharacterBuild> heroes;. Di TeamCode, jadikan list-nya public Team team; dan catat JSON-nya.
  3. LoadCode membaca code ke dalam team dan mencatat Loaded 3 heroes.

Tekan tombol “Main” dan tekan Space: tim akan ditampilkan sebagai JSON. Lalu tekan tombol “Periksa”.

Coba sendiri

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class CharacterBuild
{
    public string hero;
    public int Strength { get; set; }
    private int agility;
}

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity