Home > database >  How to get values from JSON file into C# List to use in Unity?
How to get values from JSON file into C# List to use in Unity?

Time:01-04

I'm doing a little exercise to get values from a JSON file and set those values into InputFields of a Unity project.

When I read the file all I can get is that the Index is out of range, when counting the elements inside the List it returns 0 elements.

lista.json:

{
  "personajes":[
      {"nombre":"Pepe","apellido":"Lereie","puntos":15},
      {"nombre":"David","apellido":"Garcia","puntos":99}
  ]
}

Usuarios class

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Usuarios
{
    public string nombre;
    public string apellido;
    public int puntos;

}
Personajes class

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Personajes 
{
   public List<Usuarios> personajes = new List<Usuarios>();

}

Controller Script from Unity

using System.Collections;
using System.Collections.Generic;
using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class MenuController : MonoBehaviour
{
    public TMP_InputField entradaNombre, entradaApellidos, entradaPuntos;
    string fichero;
    string datos;
    Personajes lista;

    void Awake()
    {

        fichero = Application.dataPath   "/Files/lista.json";
        datos = File.ReadAllText(fichero);
        lista = JsonUtility.FromJson<Personajes>(datos);

        Debug.log(lista[0].nombre);
    }

}

In this case the console output should be "Pepe" but the only thing I get is Index out of range.

Update:

Also tried the solution from Serge and getting the same output.

 Debug.log(lista.personajes[0].nombre);

CodePudding user response:

after deserialization, you have an object, not a list. So try this

lista = JsonUtility.FromJson<Personajes>(datos);

 Debug.log(lista.personajes[0].nombre);

IMHO , this would be more clear

 List<Usuarios> personages = JsonUtility.FromJson<Personajes>(datos).personages;

Debug.log(personajes[0].nombre);

and remove list init from the class

public class Personajes 
{
   public List<Usuarios> personajes;

}

if you still have some problem or not, I highly recommend you to install Newtonsoft.Json for Unity3d ( you can google to find it), and use this code

List<Usuarios> personajes = JsonConvert.DeserializeObject<Personajes>(json).personajes;

Debug.log(personajes[0].nombre);

CodePudding user response:

So close, but it looks like you forgot to decorate Usuarios with [System.Serializable] as well:

[System.Serializable]
public class Usuarios
{
    public string nombre;
    public string apellido;
    public int puntos;
}
  • Related