En este momento estás viendo Cómo deserializar y usar la propiedad de matrices anidadas JSON

 – Unity

Cómo deserializar y usar la propiedad de matrices anidadas JSON – Unity

Cómo deserializar y usar la propiedad de matrices anidadas JSON

– UnityAssets3Free

bienvenido , me llamo Juan y esta vez os traigo
esta nueva pregunta

estoy haciendo uno C# proyecto en Unity basado en el juego de cartas Yu-Gi-Oh. Estoy usando esta API: https://db.ygoprodeck.com/api-guide/

La API da acceso a todas las cartas del juego con su información (nombre, efecto, valor ATK) en una JSON. Pero antes de usar ese JSON, estoy trabajando con un JSON en un TXT archivo que está escrito con el mismo modelo que las API, de esta manera no hago solicitudes innecesarias a sus servidores hasta que mi proyecto esté listo, y es más fácil de probar porque la API contiene miles de tarjetas, el JSON que estoy experimentando actualmente con contiene sólo 1 tarjeta.

Ahí está:


   "data":[
      
         "id":6983839,
         "name":"Tornado Dragon",
         "type":"XYZ Monster",
         "desc":"2 Level 4 monstersnOnce per turn (Quick Effect): You can detach 1 material from this card, then target 1 Spell/Trap on the field; destroy it.",
         "atk":2100,
         "def":2000,
         "level":4,
         "race":"Wyrm",
         "attribute":"WIND",
         "card_images":[
            
               "id":6983839,
               "image_url":"https://storage.googleapis.com/ygoprodeck.com/pics/6983839.jpg",
               "image_url_small":"https://storage.googleapis.com/ygoprodeck.com/pics_small/6983839.jpg"
            
         ]
      
   ]

me gustaría conseguir el Nombre los descripción (descripción) y el URL de la imagen de la tarjeta Logré mostrar el nombre y la descripción, pero no sé cómo podría acceder a la URL de la imagen ubicado en la segunda matriz del JSON (imagen_de_la_tarjeta variedad).

ahí están mis Clasesy cómo logré mostrar el nombre y la descripción de la tarjeta:

public class Root

  public Card[] data  get; set; 



public class Card

  public int id  get; set; 
  public string name  get; set; 
  public string desc get; set; 
  public CardImage[] card_images  get; set; 


public class CardImage

  public int id  get; set; 
  public string image_url  get; set; 
  public string image_url_small get; set; 





void Start()

    string jsonString = File.ReadAllText("myTxtJson.txt");
    var cards = JsonHelper.FromJson<Root>(jsonString);
    
    foreach(Card card in cards.data)
    
      Debug.Log(card.name); // Display the name of the card
      Debug.Log(card.desc);  // Display the effect of the card
    


El punto sería (si es posible) tener acceso «simple» a las 3 propiedades que necesito que son nombre de tarjeta, tarjeta.desc y tarjeta.image_url . Gracias, si me pueden ayudar, soy nuevo en OOP, así que lo siento si hay grandes errores, también agradezco consejos sobre el código existente.

1 respuesta 1

un profesional estaría usando Linq

using System.Linq;

    List<CardInfo> cardInfoList = cards.data.Select(d => new CardInfo
    
        id = d.id,
        name = d.name,
        image_url = d.card_images.Select(d => d.image_url).ToList()
    ).ToList();

foreach(CardInfo card in cardInfoList )
    
      Debug.Log(card.name); // Display the name of the card
      Debug.Log( string.Join(",", card.image_url);  // Display the urls of the card
    

// or you can find a card by name

    CardInfo tornadoDragonCardInfo = cardInfoList
                                     .Where(d => d.name == "Tornado Dragon")
                                     .FirstOrDefault();

    int tornadoDragonId = tornadoDragonCardInfo.id;

    string tornadoDragonFirstImgUrl = tornadoDragonCardInfo.image_url[0];

public class CardInfo

    public int id  get; set; 
    public string name  get; set; 
    public List<string> image_url  get; set; 

pero si necesitas algo muy simple no necesitas ninguna clase extra

    int tornadoDragonId = cards.data[0].id;
    string tornadoDragonName = cards.data[0].name;
    string tornadoDragonImgUrl = cards.data[0].card_images[0].image_url;

pero solo funcionará para su json específico

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,espero que te halla servido

Deja una respuesta