[RESOLU]Deserializer un JSON

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Nrgumn
Messages : 7
Inscription : 02 Déc 2019 20:11

[RESOLU]Deserializer un JSON

Message par Nrgumn » 02 Déc 2019 20:20

Bonjour à tous,

J'essais dans mon application de faire un classement des joueurs. Je récupère de ma base de données un JSON qui a cette tête là => [{"userName":"Nrgumn","userScore":"7"},{"userName":"Remy","userScore":"8"}]

Dans cet exemple je récupère le pseudo et le score de 2 joueurs.

Est-ce que quelqu'un pourrait m'expliquer comment je peux faire pour pouvoir récupérer les informations de ces 2 joueurs ?

Merci beaucoup :)
Rémy
Dernière édition par Nrgumn le 05 Déc 2019 17:18, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5160
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Deserialize un JSON

Message par boubouk50 » 02 Déc 2019 20:43

Tu as de la chance, j'ai vu ça Jeudi dernier. Pour les explications par contre, je ne suis pas au point.
https://stackoverflow.com/questions/370 ... listobject
Tu ne peux pas directement "deserializer" un tableau. Il te faut donc tricher en deux étapes avec 2 wrappers.
Tu vas créer une classe qui possède les champs de ce que tu dois récupérer et une autre qui est une liste ou un tableau de cette classe.
Il te faut modifier ta string pour pouvoir la "déserializer" comme une variable unique.
[... tu vois, je sais pas l'expliquer]
Premièrement, modifier ta string

Code : Tout sélectionner

[{"userName":"Nrgumn","userScore":"7"},{"userName":"Remy","userScore":"8"}]
pour que ce soit l'affectation d'une seule variable et avoir un résultat comme suit:

Code : Tout sélectionner

newJsonString = {"players":[{"userName":"Nrgumn","userScore":"7"},{"userName":"Remy","userScore":"8"}]}
Tu vois maintenant tu peux "déserializer" dans players.
Il faut donc définir players:

Code : Tout sélectionner

[Serializable]
public class Players
{
    public Player[] players;
}
players est un tableau de player, ce que tu veux récupérer, il te faut donc la définir comme tu le ferais pour une variable unique

Code : Tout sélectionner

[Serializable]
public class Player
{
    public string userName;
    public int userScore;
}
Voilà, maintenant tu as une variable players qui contient des player.
Tu peux donc "déserializer":

Code : Tout sélectionner

Players myPlayers = JsonUtility.FromJson<Players>(newJsonString );
et tu peux ensuite accéder à chaque player depuis le tableau:

Code : Tout sélectionner

myPlayers.players[index]
Car myPlayers contient une variable players qui est un tableau de player.

J'espère que je suis suffisamment pas trop obscur pour que tu aies compris :D
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nrgumn
Messages : 7
Inscription : 02 Déc 2019 20:11

Re: Deserialize un JSON

Message par Nrgumn » 02 Déc 2019 21:10

Merci beaucoup, c'est très détaillé.
J'essaye ça dès demain, je te dirai si ça à fonctionné.
Encore merci.

Nrgumn
Messages : 7
Inscription : 02 Déc 2019 20:11

Re: Deserialize un JSON

Message par Nrgumn » 02 Déc 2019 22:42

Bon je ne m'en sort pas.

J'ai un problème à la compilation sur la ligne

Code : Tout sélectionner

Players myPlayers = JsonUtility.FromJson<Player>(newJsonString );
Voici l'erreur :
CS0029 Impossible de convertir implicitement le type 'Player' en 'Players'

Voici les 2 classes que j'ai créées

Code : Tout sélectionner

[Serializable]
public class Players
{
    public Player[] players;
}

[Serializable]
public class Player
{
    public string userName;
    public int userScore;
}
Voici ce que j'ai fait pour travailler le JSON que je reçois de mon script PHP

Code : Tout sélectionner

newJsonString = "{" + '\u0022' + "players" + '\u0022' + ":" + '\u0022' + jsonString + '\u0022' + "}";
Ce qui me donne la chaîne de caractères suivante :
{"players":"[{"userName":"Nrgumn","userScore":"7"},{"userName":"R\u00e9my","userScore":"8"}]"}


Une idée ?

Avatar de l’utilisateur
Alesk
Messages : 2212
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Deserialize un JSON

Message par Alesk » 03 Déc 2019 12:22

Salut,

Ton Array est entre guillemets

{"players":"[{"userName":"Nrgumn","userScore":"7"},{"userName":"R\u00e9my","userScore":"8"}]"}

il ne faut pas ;)

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7504
Inscription : 30 Juil 2011 13:57

Re: Deserialize un JSON

Message par Max » 03 Déc 2019 12:36

Salut,

en complément du commentaire d'Alesk,
Nrgumn a écrit :
02 Déc 2019 22:42
J'ai un problème à la compilation sur la ligne

Code : Tout sélectionner

Players myPlayers = JsonUtility.FromJson<Player>(newJsonString );
Voici l'erreur :
CS0029 Impossible de convertir implicitement le type 'Player' en 'Players'
ce n'est pas

Code : Tout sélectionner

Players myPlayers = JsonUtility.FromJson<Player>(newJsonString );
mais plutôt

Code : Tout sélectionner

Players myPlayers = JsonUtility.FromJson<Players>(newJsonString );
le type de l'objet attendu doit correspondre au type demandé.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5160
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Deserialize un JSON

Message par boubouk50 » 03 Déc 2019 14:15

Je plaide coupable pour les 2 coquilles :mrgreen:

(je les ai rectifiées pour d'éventuels autres membres en souffrance)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nrgumn
Messages : 7
Inscription : 02 Déc 2019 20:11

Re: Deserialize un JSON

Message par Nrgumn » 03 Déc 2019 14:58

Ça fonctionne nickel.
Merci à tous, super travail d'équipe :super:

Répondre

Revenir vers « Scripting Javascript, C# et Boo »