Ich verwende gson , um einen json- String in ein Java-Objekt zu konvertieren . Der Wert von result2 ist genau der gleiche wie der Wert von result1 . (Vom Debugger kopiert; Backslashs hinzugefügt)
Die folgende Ausnahme wird beim Konvertieren von Ergebnis1 ausgelöst: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Erwartete EOF in Zeile 1, Spalte 170
Das Konvertieren von result2 funktioniert einwandfrei .
Die json-Zeichenfolge ist gemäß jsonlint.com gültig.
public static Userinfo getUserinfo()
{
String result1 = http.POST("https://www.bitstamp.net/api/balance/",
postdata, true);
String result2 = "{\"btc_reserved\": \"0\", \"fee\": \"0.5000\", \"btc_available\": \"0.10000000\", \"usd_reserved\": \"0\", \"btc_balance\": \"0.10000000\", \"usd_balance\": \"30.00\", \"usd_available\": \"30.00\"}";
Gson gson = new Gson();
Userinfo userinfo1 = gson.fromJson(result1, Userinfo.class); //throws Exception
Userinfo userinfo2 = gson.fromJson(result2, Userinfo.class); //works fine
return userinfo1;
}
private class Userinfo {
public Userinfo(){
}
public float usd_balance;
public float btc_balance ;
public float usd_reserved;
public float btc_reserved;
public float usd_available;
public float btc_available;
public float fee;
public float last_update;
}
Nach meiner jüngsten Erfahrung
JsonReader#setLenient
ist der Parser im Grunde genommen sehr tolerant, selbst um fehlerhafte JSON-Daten zuzulassen.Bei bestimmten Daten, die von Ihren vertrauenswürdigen RESTful-APIs abgerufen wurden, kann dieser Fehler jedoch durch nachgestellte Leerzeichen verursacht werden. In solchen Fällen würden einfach
trim
die Daten den Fehler vermeiden:Dann
gson.fromJson(trimmed, T)
könnte es funktionieren. Sicherlich deckt dies nur einen Sonderfall ab, also YMMV.quelle
Im Debugger müssen Sie keine Schrägstriche hinzufügen, das Eingabefeld versteht die Sonderzeichen.
Im Java-Code müssen Sie den Sonderzeichen entkommen
quelle