web-dev-qa-db-fra.com

Caractère inattendu rencontré lors de l'analyse de la valeur

Actuellement, j'ai quelques problèmes. J'utilise C # avec Json.NET. Le problème est que je reçois toujours: 

{"Caractère inattendu rencontré lors de l'analyse de la valeur: e. Path '', ligne 0, position 0."}

Donc, j’utilise Json.NET de la façon suivante. J'ai une classe qui devrait être sauvée. La classe ressemble à ceci:

public class stats
{
    public string time { get; set; }
    public string value { get; set; }
}

public class ViewerStatsFormat
{
    public List<stats> viewerstats { get; set; }
    public String version { get; set; }

    public ViewerStatsFormat(bool chk)
    {
        this.viewerstats = new List<stats>();
    }
}

Un objet de cette classe sera rempli et enregistré avec:

 File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);

La partie sauvegarde fonctionne bien et le fichier existe et est rempli. Après cela, le fichier sera lu dans la classe avec:

    try 
{ 

    ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
    //otherstuff        

}
catch(Exception ex)
{
    //error loging stuff
}

Maintenant sur la ligne = courante vient l'exception: 

{"Caractère inattendu rencontré lors de l'analyse de la valeur: e. Path '', ligne 0, position 0."}

Je ne sais pas pourquoi cela vient. Le fichier json est le suivant -> Cliquez sur le lien JSON

Quelqu'un a-t-il une idée?

68
zAfLu

Peut-être que vous ne passez pas JSON à DeserializeObject.

Il semble que, à partir de File.WriteAllText(tmpfile,..., le type de tmpfile soit string contenant le chemin d'accès à un fichier. JsonConvert.DeserializeObject prend la valeur JSON, pas le chemin du fichier - elle échoue donc dans la tentative de conversion de quelque chose comme @"c:\temp\fooo" - qui n'est clairement pas JSON.

98
Alexei Levenkov

J'ai résolu le problème avec ces outils en ligne:

  1. Pour vérifier si la structure de Json est OKAY: http://jsonlint.com/
  2. Pour générer ma classe d'objet à partir de ma structure Json: http://json2csharp.com/

Le code simple:

RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));
54
Edu Pelais

J'ai rencontré la même erreur dans ma solution Xamarin.Android.

J'ai vérifié que mon JSON était correct et j'ai remarqué que l'erreur n'apparaissait que lorsque j'exécutais l'application en tant que version Release.

Il s'est avéré que l'éditeur de liens supprimait une bibliothèque de Newtonsoft.JSON, ce qui entraînait une analyse incorrecte du JSON.

J'ai corrigé l'erreur en ajoutant Newtonsoft.Json au paramètre Ignore assemblies dans la configuration de construction Android (capture d'écran ci-dessous).

Code d'analyse JSON

static readonly JsonSerializer _serializer = new JsonSerializer();
static readonly HttpClient _client = new HttpClient();

static async Task<T> GetDataObjectFromAPI<T>(string apiUrl)
{
    using (var stream = await _client.GetStreamAsync(apiUrl).ConfigureAwait(false))
    using (var reader = new StreamReader(stream))
    using (var json = new JsonTextReader(reader))
    {
        if (json == null)
            return default(T);

        return _serializer.Deserialize<T>(json);
    }
}

Capture d'écran de Visual Studio Mac

 enter image description here

Capture d'écran de Visual Studio

 enter image description here

10
Brandon Minnick

Supposons que ce soit votre json 

{
  "date":"11/05/2016",
  "venue": "{\"ID\":12,\"CITY\":Delhi}"
}

si vous voulez encore désérialiser le lieu, modifiez json comme ci-dessous

{
  "date":"11/05/2016",
  "venue": "{\"ID\":\"12\",\"CITY\":\"Delhi\"}"
}

puis essayez de désérialiser à la classe respective en prenant la valeur de lieu

1
Hrishikesh T T

J'ai eu le même problème avec webapi dans le noyau ASP.NET. Dans mon cas, c'était parce que mon application avait besoin d'une authentification. Elle a ensuite attribué l'annotation [AllowAnonymous] et cela a fonctionné.

[AllowAnonymous]
public async Task <IList <IServic >> GetServices () {
        
}
1
Celso Xavier Luz

Si vous utilisez le téléchargement de données à l'aide de l'URL, vous devrez peut-être utiliser

var result = client.DownloadData (url);

0
Taran

Veuillez vérifier que le modèle que vous avez partagé entre le client et le serveur est identique. Parfois, vous obtenez cette erreur lorsque vous n'avez pas mis à jour la version d'API et que celle-ci renvoie un modèle mis à jour, mais vous en avez toujours un ancien. Parfois, vous obtenez ce que vous sérialisez/désérialisez n'est pas un JSON valide.

0
Nalan Madheswaran

Dans mon scénario, j'avais un message légèrement différent, où la ligne et la position n'étaient pas nulles.

E. chemin 'job [0] .name', ligne 1, position 12.

C’était la réponse privilégiée de Google au message que j’avais cité.

Cela est dû au fait que j'avais appelé un programme à partir de la ligne de commande Windows, en transmettant JSON en tant que paramètre.

Lorsque j'ai examiné les arguments de mon programme, toutes les guillemets doubles ont été supprimés. Vous devez les reconstituer.

J'ai posté une solution ici . Bien qu'il puisse probablement être amélioré avec un regex.

0
JGFMK

J'ai rencontré un message d'erreur similaire dans Formulaires Xamarin lors de l'envoi d'une requête à webApi pour obtenir un jeton, 

  • Assurez-vous que toutes les clés ( key : value) (ex. 'nomutilisateur', 'mot de passe', 'grant_type') du fichier Json correspondent exactement à ce que webApi attend, sinon cette exception est déclenchée.

Exception non gérée: Newtonsoft.Json.JsonReaderException: caractère inattendu rencontré lors de l'analyse de la valeur: <. Chemin '', ligne 0, position 0

0
A. Almazidi

J'ai eu une erreur similaire et j'ai pensé répondre au cas où quelqu'un aurait quelque chose de similaire. Je passais en boucle sur un répertoire de fichiers JSON et les désérialisais, mais je recevais la même erreur.

Le problème était qu'il essayait également de récupérer des fichiers cachés. Assurez-vous que le fichier que vous transmettez est un fichier .json. Je suppose que ça va gérer le texte aussi. J'espère que cela t'aides.

0
Ibaeni