Wie um zu überprüfen, string im json-format
Möchte ich eine Funktion erstellen, um zu erhalten einen input-string können string im json-format oder einfach nur ein string. Zum Beispiel mit etwas einfachem an, wie folgende Funktion.
func checkJson(input string){
if ... input is in json ... {
fmt.Println("it's json!")
} else {
fmt.Println("it's normal string!")
}
}
- Verwenden Sie die json Paket, und versuchen zu entschlüsseln
[]byte(inputstring)
ersten? Wenn können Sie ein Beispiel geben, warum Sie benötigen, um dies zu tun, es könnte uns helfen, Ihnen eine bessere Antwort. Es scheint seltsam, dass Sie nicht bestimmen können, wenn Ihre Anwendung möglicherweise Parsen von JSON oder nicht. - Ich möchte wickeln gehen http das senden von Anfrage-Funktion. Also, wenn parameter json, ich will 'content-type' auf 'application/jon', wenn nicht, setze ich es auf 'application/x-www-form-urlencoded'
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich unklar, ob Sie brauchen, zu wissen, über nur einen "quoted-string" oder, wenn Sie benötigt wissen über json, oder der Unterschied zwischen den beiden von Ihnen, das zeigt, wie Sie erkennen beide Szenarien, so dass Sie können sehr spezifisch sein.
Ich geschrieben das interaktive code-Beispiel auch hier: http://play.golang.org/p/VmT0BVBJZ7
Die Ausgabe wird dies:
isJSON
Funktion solltevar js interface{}
für maximale Allgemeingültigkeit[{"id":"1"}]
? Dies ist gültiges JSON, aber Ihre Skripte zu sagen, es ist nicht.map[string]interface{}
mit nurìnterface{}
ich war in der Lage, für die überprüfung eines zufällig erzeugten, großen, aber gültige JSON-Datei.var js json.RawMessage
statt, denn auf diese Weise wird die Nachricht nicht unmarshallt werden, daher wird es schneller und es wird weniger mem Zuweisungen.var js interface{}
vs.var js json.RawMessage
.var js json.RawMessage
ist > 2x so schnell, weil es verhindert jede Reflexion.Für jemand anderen suchen nach einer Möglichkeit, zu validieren JSON-string, unabhängig davon, schema, versuchen Sie Folgendes:
[{"key": "value1"}, {"key": "value2"}]
. Auch eine alternative Möglichkeit, es zu tun: play.golang.org/p/0IfY696ubM"somestring"
(mit Anführungszeichen) in die Funktion, die es true zurückBeispielsweise
Ausgabe:
[{"id":"1"}]
? Dies ist gültiges JSON, aber Ihre Skripte zu sagen, es ist nicht.[{"key": "value1"}, {"key": "value2"}]
. Die meisten Menschen sind nicht auf der Suche zu validieren Dinge wie"Platypus"
. Sie validieren wollen großen JSON-arrays.Standard
encoding/json
Bibliothek enthält json.Gültig Funktion ab gehen, 1.9 - siehe https://github.com/golang/go/issues/18086 . Diese Funktion kann verwendet werden, um zu überprüfen, ob der bereitgestellte string ist ein gültiges json:Aber
json.Valid
kann sehr langsam sein im Vergleich zu third-party-Lösungen wie fastjson.Überprüfen, die bis zu 5x schneller als die standard -json.Valid
- siehejson validation
Abschnitt in benchmarks.Die aktuelle akzeptierte Antwort (Juli 2017) nicht für die JSON-arrays und wurde noch nicht aktualisiert: https://repl.it/J8H0/10
Versuchen Sie dies:
Oder William King ' s Lösung, die besser ist.
wie wäre Sie so etwas wie dieses:
In die Suche nach einer Antwort auf diese Frage fand ich https://github.com/asaskevich/govalidator, das gebunden war an diesem blog-post beschreibt das erstellen einer input validator: https://husobee.github.io/golang/validation/2016/01/08/input-validation.html. Nur für den Fall, jemand ist auf der Suche nach einer quick library auf, dies zu tun, ich dachte, es wäre nützlich, um das tool in einem einfach zu finden Platz.
Dieses Paket verwendet die gleiche Methode für isJSON, dass William King schlägt vor, wie folgt:
Diesem Paket gab mir einen besseren Einblick in die JSON-in gehen, so schien es nützlich, hier stellen.