IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

c sharp json Erreur : Unexpected character encountered while parsing value: . Path '', line 0, position 0. [Débutant]


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut c sharp json Erreur : Unexpected character encountered while parsing value: . Path '', line 0, position 0.
    Bonjour,
    je veux récupérer le contenu d'une page web au format Json dans un objet C sharp. Malheureusement, je reçois le message suivant:

    "Unexpected character encountered while parsing value: . Path '', line 0, position 0.".

    Voici le code qui génère cette erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
                public static GoogleMapsResult Calcul(GoogleMapsPoint origine, GoogleMapsPoint destination)
            {
                GoogleMapsResult result = new GoogleMapsResult();
                string path = GoogleMapsParameter.UrlDistance  + GoogleMapsParameter.GmKey;
                path = path + "&origine=" + origine.Latitude + ","  + origine.Longitude;
                path = path + "&destination=" + destination.Latitude + "," + destination.Longitude;
     
                using (var w = new WebClient())
                {
                    var json_data = string.Empty;
                    try
                    {
                        json_data = w.DownloadString(new Uri(path));
     
                        if (!string.IsNullOrEmpty(json_data))
                        {
                            result = JsonConvert.DeserializeObject<GoogleMapsResult>(json_data);
                        }                 
                    }
                    catch (WebException ex)
                    {
                        IhmErrors.ManageExceptionDisplay(ex, Enums.ExceptionBehavior.Continue);
                    }
                }
                return result;
            }
    Quelques explications:

    • La variable Path contient l'url et il est sans erreur. Car lorsque je copie le contenu et le colle dans mon browser, j'ai bien le contenu attendu de ma page au format Json.


    • L'objet GoogleMapsResult est bien impléménté et match bien les élements du contenu au format Json.


    Mais lors de l'exécution, la variable result n'est pas alimentée. C'est l'erreur décrite plus haut qui est générée.
    En cherchant sur le net, je pense que la variable json_data doit contenir : @"{......}" or elle contient actuellement le contenu de la page de retour ( "{......}" ) sans '@' au début.
    Si l'erreur est due au fait qu'il n' ait pas '@' au début du contenu de la page, comment puis-je concatener '@' à mon contenu "{.........}"?
    J'ai essayé de concaténer avec l'opérateur + sans succès.
    Je m'excuse de ne pas pouvoir écrire intégralement le code ici par mesure de sécurité.

    Merci d'avance pour toute aide.

    Maren

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut
    Bonjour,

    Je n'ai encore jamais fait joujou avec du JSON donc je ne vais pas t'être d'une grande aide mais as-tu pensé à vérifier le code JSON avec un parser sur le net ?
    http://json.parser.online.fr/

    Cordialement,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut
    Bonjour Mattdef,

    Merci pour ta réponse.

    J'ai testé mon code Json avec ce parser et je ne suis pas surprise qu'il soit bon :-). Mon code Json est bel et bien valide.

    L'erreur persiste toujours et je ne sais pas comment résoudre ce problème.

    Merci.

    Maren

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur en Technologie de l'Informations
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en Technologie de l'Informations

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut
    Salut,

    Sans utilisé les "+" pour concaténer, essaye d'utilisé String.Concat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static string Concat(
    	string str0,
    	string str1
    )

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Juste comme ça je dirais que ça sent le problème d'encodage ! as-tu essayé de changer l'encodage du json que tu reçois ?

    J@ck.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut
    Bonjour,

    @J@ck comment je peux changer l'encodage du contenu JSON? J'ai un peu regarder sur le net et j'ai trouvé "json_encode" utilisé, je pense, pour du javascript, moi je suis en Winform et voudrais récupérer les objets de la page au format Json et les afficher dans un formulaire en client lourd.

    @juse12k : Les objets à concaténer doivent être tous des string. Or '@' que je voudrais avoir au début de mon string n'est pas un string.

    Merci pour vos réponses. Je continue à galérer ;-)

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Tu ne peux pas concaténer un @ devant un string comme tu voudrais le faire. @ est un élément du langage de C# qui informe le compilateur que la chaine qui suit contient des caractères spéciaux qui ne doivent pas être interprétés (enfin quelque chose comme ça), en gros "c:\\folder1\\file.txt" et @"c:\folder1\file.txt" sont équivalent.

    Pour l'encodage c'est la chaine de caractère qui contient ton json qu'il faut encoder, quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte[] bytes = Encoding.Default.GetBytes(myString);
    myString = Encoding.UTF8.GetString(bytes);
    Mais pas sur que ce soit la solution à ton problème, regarde dans d'autres directions aussi.



    [Edit] as tu lu ce post, il sous-entend que l'erreur apparait simplement quand ta chaine qui devrait contenir du json n'en contient finalement pas. En debug json_data contient bien ton texte json ?

    J@ck.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut
    Bonjour,
    Après plusieurs tests et recherches sur Internet, je suis convaincue que mon problème est UNIQUEMENT celui du format de ma chaîne JSON.
    Regarder ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     public class Example
        {
            public string href { get; set; }
            public string target { get; set; }
        }
     
     public static Example Calcul()
            {
                string js1 = "{'href':'/account/login.aspx','target':'_blank'}";
                string js2 = "{'href':'/account/login.aspx','target':'_blank'}";
     
                // 1er essai de formatage de js2
                string js3 = JsonConvert.SerializeObject(js2, Formatting.Indented);
     
                // 2ème essai de formatage de js2
                byte[] bytes = Encoding.Default.GetBytes(js2);
                string js4 = Encoding.UTF8.GetString(bytes);
     
                Example exp1 = new Example();
                Example exp2 = new Example();
                Example exp3 = new Example();
                Example exp4 = new Example();
     
                exp1 = JsonConvert.DeserializeObject<Example>(js1);
                exp2 = JsonConvert.DeserializeObject<Example>(js2);
                exp3 = JsonConvert.DeserializeObject<Example>(js3);
                exp4 = JsonConvert.DeserializeObject<Example>(js4);
     
                return exp1;
            }
    La variable js1 contient un string JSON copier sur le net.
    La variable js2 contenait le string que je pensais être au format JSON. J'ai copier le contenu de js1 dans js2, c'est à dire que le format initial de js2 est resté le même. Ce qui fait que visuellement les deux variables (js1 et js2) ont la même valeur, mais pas le même encodage. La preuve, le caractère "&#65279" qui apparaît au début de la chaîne js2 n'existait pas dans mon code. Il est apparu lorsque je rédigeait ce message. Je pense que c'est ce caractère invisible dans mon code qui est à l'origine de l'erreur.
    J'ai essayé différents types de formatage comme décrit dans le code. Conséquences:
    • Pour l'objet "exp1" le contenu de la chaîne js1 lui a été bien assigné. ==> OK
    • Pour l'objet "exp2", je reçois l'erreur suivante: Unexpected character encountered while parsing value: . Path '', line 0.
    • Pour l'objet "exp3", je reçois l'erreur suivante: Error converting value "{'href':'/account/login.aspx','target':'_blank'}" to type 'Example'. Path '', line 1, position 51.
    • Pour l'objet "exp4", je reçois l'erreur suivante : Unexpected character encountered while parsing value: ?. Path '', line 0, position 0.


    Je pense le problème serait résolu si je réussissais à identifier l'encodage de js1 pour l'affecter à js2. Si vous avez une idée, je serai ravie.

    Merci d'avance

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut
    Bonjour,
    j'ai pu résoudre ce problème de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte[] bytes = Encoding.Default.GetBytes(js2);
    js2 = Encoding.UTF8.GetString(bytes, 1, bytes.Length - 1);
    Ce bout de code me permet de supprimer le caractère invisible dans le string js2. Du coup le js2 est au format JSON et ne génère plus d'erreur.

    Merci pour votre aide.

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    C'est donc bien ce qu'il me semblait.
    J'avais eu la même prise de tête un coup en récupérant des données d'un service web (saml), et la solution était justement de retirer le dernier caractère, désolé ça ne m'a pas tilté tout de suite

    Je peux donc affirmer que ton problème n'est pas spécifique à json, mais plutôt liè au transport des données ou peut être à la techno, genre ça vient de java, java nous colle un \0 en fin de chaine (me semble que java gère ces string comme ça) et nous on le récupère et pouf ! un caractère en trop ... enfin je spécule pas mal là

    J@ck

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] SyntaxError: JSON.parse: unexpected character
    Par nanousik dans le forum jQuery
    Réponses: 4
    Dernier message: 07/08/2013, 16h49
  2. Erreur : Unexpected character in input
    Par Allen_blocci dans le forum Langage
    Réponses: 2
    Dernier message: 31/07/2013, 11h09
  3. Réponses: 6
    Dernier message: 06/05/2012, 17h41
  4. Erreur "Unexpected character in input en php"
    Par chouxe dans le forum Langage
    Réponses: 6
    Dernier message: 22/06/2011, 15h32
  5. Réponses: 7
    Dernier message: 25/03/2011, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo