JSON convertit des char en ASCII

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Kazuma17
Messages : 33
Inscription : 29 Août 2017 15:56

JSON convertit des char en ASCII

Message par Kazuma17 » 01 Août 2021 16:30

Bonjour !

J'ai un soucis concernant une écriture dans un JSON. J'ai un char[] que j'enregistre dedans, mais pour une raison que j'ignore mes char sont convertis par leur valeur ASCII. Pour le contexte, j'ai simplement crée un bouton qui au clic crée un fichier JSON avec un formattage correct que je peux ensuite remplir manuellement.

Donc en soi que ce soit des valeurs ASCII n'est pas bloquant car je peux réécrire dessus à la main, mais je souhaite quand même comprendre cette situation.

Voici les scripts (je n'ai pas inclus toutes les déclarations de variables ça n'est pas pertinent) :
Mon wrapper de données JSON

Code : Tout sélectionner

[System.Serializable]
public class JSON_Container
{
   public List<JSON_CardsInfos> cardsInfos;
}
Les données du JSON

Code : Tout sélectionner

[System.Serializable]
public class JSON_CardsInfos
{
    public string cardName;
    public string cardDesc;
    public char[] toTakeLetters;
}
Le script qui écrit dans le JSON

Code : Tout sélectionner

 
 public class CardGenerator : MonoBehaviour
 public void CreateBaseJSONifNull()
    {
        if (!File.Exists(JSONpath))
        {
            cardsInfosContainer = new JSON_Container();
            cardsInfosContainer.cardsInfos = new List<JSON_CardsInfos>();
            for (int i = 0; i < 2; i++)
            {
                JSON_CardsInfos cardInfos = new JSON_CardsInfos();
                cardInfos.cardName = "" + i;
                cardInfos.cardDesc = "Description : " + i;
                cardInfos.toTakeLetters = new char[3] { 'N', 'E', 'W' };
                cardsInfosContainer.cardsInfos.Add(cardInfos);
            }
            SaveJSON();
        }
        else
            Debug.Log("Un fichier JSON est déjà présent à l'emplacement dédié");
    }

    void SaveJSON()
    {
        string jsonData = JsonUtility.ToJson(cardsInfosContainer, true);
        File.WriteAllText(JSONpath, jsonData);
    }
Et voici la sortie de mon JSON généré, on voit que "toTakeLetters" contient les valeurs ASCII de 'N','E', et 'W' :

Code : Tout sélectionner

{
    "cardsInfos": [
        {
            "cardName": "0",
            "cardDesc": "Description : 0",
            "toTakeLetters": [
                78,
                69,
                87
            ]
        },
        {
            "cardName": "1",
            "cardDesc": "Description : 1",
            "toTakeLetters": [
                78,
                69,
                87
            ]
        }
    ]
}
J'ai tenté de modifier la ligne suivante qui je pense pose soucis :

Code : Tout sélectionner

File.WriteAllText(JSONpath, jsonData);
notamment par

Code : Tout sélectionner

File.WriteAllText(JSONpath, jsonData, System.Text.Encoding.UTF8);
ou encore

Code : Tout sélectionner

        File.WriteAllText(JSONpath, jsonData, System.Text.Encoding.Unicode);
mais ça n'a rien changé, je n'y connais pas grand chose en encodage c'est pourquoi je me tourne vers vous.

Et voici comment j'ai crée le bouton dans l'Inspector si cela intéresse quelqu'un :

Code : Tout sélectionner

[CustomEditor(typeof(CardGenerator))]
public class CardGeneratorInspector : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        CardGenerator cardGenerator = (CardGenerator)target;
        
        EditorGUILayout.Space();

        if (GUILayout.Button("Générer un JSON vierge à remplir si inexistant"))
        {
            cardGenerator.CreateBaseJSONifNull();
        }
        
        EditorGUILayout.Space();
Merci d'avance d'avoir pris le temps de lire (et répondre) ! :super:

Avatar de l’utilisateur
Max
Messages : 8381
Inscription : 30 Juil 2011 13:57
Contact :

Re: JSON convertit des char en ASCII

Message par Max » 01 Août 2021 17:06

Bonjour,

je pense que tu auras toujours des valeurs numériques pour tes char en sortie dans ton fichier JSON, les chars étant finalement à la base des entiers sur 2 octets.
Si tu souhaites faire apparaitre dans ton fichiers JSON les valeurs sous forme de caractères alphanumériques, alors je pense qu'il faut passer par les string. En reprenant ton code, on pourrait alors écrire:

Code : Tout sélectionner

[System.Serializable]
public class JSON_CardsInfos
{
    public string cardName;
    public string cardDesc;
    public string[] toTakeLetters;
}
puis

Code : Tout sélectionner

...
cardInfos.toTakeLetters = new string[3] { "N", "E", "W" };
...
Image
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

Kazuma17
Messages : 33
Inscription : 29 Août 2017 15:56

Re: JSON convertit des char en ASCII

Message par Kazuma17 » 02 Août 2021 09:48

Hello,

Je pensais pouvoir faire quelque chose en changeant la manière d'écrire dans le JSON (File.WriteAllText), mais après maintes recherches je ne trouve aucun exemple de char dans ce format donc effectivement il n'a pas l'air d'être pris en charge. Je vais utiliser ta solution qui semble la plus simple. Merci pour ta réponse :super:

Répondre

Revenir vers « Scripting »