wake-up-neo.com

Unerwartetes Zeichen beim Analysieren des Wertes

Momentan habe ich einige Probleme. Ich verwende C # mit Json.NET. Das Problem ist, dass ich immer bekomme: 

{"Unerwartetes Zeichen beim Parsing des Werts: e. Pfad '', Zeile 0, Position 0."}

So verwende ich Json.NET wie folgt. Ich habe eine Klasse, die gerettet werden sollte. Die Klasse sieht so aus:

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>();
    }
}

Ein Objekt dieser Klasse wird gefüllt und gespeichert mit:

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

Das Speichern funktioniert einwandfrei und die Datei ist vorhanden und gefüllt. Danach wird die Datei in die Klasse zurückgelesen mit:

    try 
{ 

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

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

Nun kommt in der aktuellen Zeile die Ausnahme: 

{"Unerwartetes Zeichen beim Parsing des Werts: e. Pfad '', Zeile 0, Position 0."}

Ich weiß nicht, warum das so ist. Die Json-Datei ist die folgende -> Klicken Sie im JSON-Link auf mich

Hat jemand irgendwelche Ideen?

68
zAfLu

Möglicherweise übergeben Sie JSON nicht an DeserializeObject.

Es sieht so aus, als ob aus File.WriteAllText(tmpfile,... der Typ von tmpfilestring ist, der den Pfad zu einer Datei enthält. JsonConvert.DeserializeObject nimmt den JSON-Wert und nicht den Dateipfad. Daher schlägt der Versuch fehl, etwas wie @"c:\temp\fooo" zu konvertieren. Dies ist eindeutig kein JSON.

98
Alexei Levenkov

Ich habe das Problem mit diesen Online-Tools gelöst:

  1. So prüfen Sie, ob die Json-Struktur OKAY ist: http://jsonlint.com/
  2. So generieren Sie meine Object-Klasse aus meiner Json-Struktur: http://json2csharp.com/

Der einfache Code:

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

Ich habe den gleichen Fehler in meiner Xamarin.Android-Lösung festgestellt.

Ich habe überprüft, ob mein JSON korrekt ist, und habe festgestellt, dass der Fehler nur aufgetreten ist, als ich die App als Release-Build ausführte.

Es stellte sich heraus, dass der Linker eine Bibliothek aus Newtonsoft.JSON entfernte, was dazu führte, dass der JSON falsch analysiert wurde.

Ich habe den Fehler behoben, indem Sie Newtonsoft.Json zu der Einstellung Baugruppen ignorieren in der Android-Build-Konfiguration hinzugefügt haben (Screenshot unten).

JSON-Code analysieren

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);
    }
}

Visual Studio Mac-Screenshot

 enter image description here

Visual Studio-Screenshot

 enter image description here

10
Brandon Minnick

Dieses Problem hängt mit der Byte Order Mark in der JSON-Datei zusammen. JSON-Datei wird beim Speichern nicht als UTF8-Codierungsdaten codiert. Beheben Sie dieses Problem mit File.ReadAllText(pathFile).

Wenn wir Byte-Daten verarbeiten, diese in einen String konvertieren und dann an JsonConvert.DeserializeObject übergeben, können wir die Zeichenfolge mit UTF32-Codierung abrufen.

byte[] docBytes = File.ReadAllBytes(filePath);

string jsonString = Encoding.UTF32.GetString(docBytes);

2
Praveen

Angenommen, das ist dein Json 

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

wenn Sie den Veranstaltungsort erneut deserialisieren möchten, ändern Sie json wie unten beschrieben

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

versuchen Sie dann, sich in die jeweilige Klasse zu deserialisieren, indem Sie den Wert des Veranstaltungsortes übernehmen

1
Hrishikesh T T

Ich hatte das gleiche Problem mit webapi im ASP.NET-Kern, in meinem Fall, weil meine Anwendung eine Authentifizierung benötigt, dann die Annotation [AllowAnonymous] zuweist und es funktionierte.

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

Wenn Sie das Herunterladen von Daten mithilfe von URL ... verwenden, müssen Sie möglicherweise verwenden

var result = client.DownloadData (url);

0
Taran

Bitte überprüfen Sie, ob das zwischen Client und Server freigegebene Modell identisch ist. Manchmal erhalten Sie diese Fehlermeldung, wenn Sie die Api-Version nicht aktualisiert haben und ein aktualisiertes Modell zurückgibt. Sie haben jedoch noch ein altes Modell. Manchmal erhalten Sie, was Sie serialisieren/deserialisieren, keine gültige JSON.

0

In meinem Szenario hatte ich eine etwas andere Meldung, bei der die Linie und Position nicht Null waren.

E. Pfad 'job [0] .name', Zeile 1, Position 12.

Dies war die beste Antwort von Google auf die von mir angegebene Nachricht.

Dies geschah, weil ich ein Programm über die Windows-Befehlszeile aufgerufen und JSON als Parameter übergeben hatte.

Als ich die Argumente in meinem Programm überprüfte, wurden alle doppelten Anführungszeichen entfernt. Sie müssen sie wiederherstellen.

Ich habe eine Lösung gepostet hier . Obwohl es wahrscheinlich mit einem Regex verbessert werden könnte.

0
JGFMK

Ich habe eine ähnliche Fehlermeldung in Xamarin Forms erhalten, wenn ich eine Anfrage an webApi schickte, um ein Token zu erhalten. 

  • Stellen Sie sicher, dass alle Schlüssel ( key : value) (z. B. 'username', 'password', 'grant_type') in der Json-Datei genau das sind, was der webApi erwartet, andernfalls löst diese Ausnahme aus.

Nicht behandelte Ausnahme: Newtonsoft.Json.JsonReaderException: Unerwartetes Zeichen beim Analysieren des Werts: <. Pfad '', Zeile 0, Position 0

0
A. Almazidi

Ich hatte einen ähnlichen Fehler und dachte, ich würde antworten, falls jemand etwas Ähnliches hat. Ich habe ein Verzeichnis mit JSON-Dateien durchlaufen und sie deserialisiert, habe aber den gleichen Fehler erhalten.

Das Problem war, dass versucht wurde, auch versteckte Dateien zu erfassen. Stellen Sie sicher, dass es sich bei der übergebenen Datei um eine JSON-Datei handelt. Ich vermute, es wird auch Text verarbeiten. Hoffe das hilft.

0
Ibaeni