2017-04-25 16 views
-4

Ich habe eine Anführungszeichen in den JSON-Daten, die Teil der Daten selbst sind, zu finden.Suchen von Text in Zeichenfolge

Eg: { "Key": "Wert", "Key1", "Val" ue1 "}

Nun ist die doppelten Anführungszeichen in Val" muss ue1 abgerufen und nicht andere doppelte Anführungszeichen werden.

Eine Idee, wie dies zu erreichen ist?

+0

Ihr JSON scheint nicht gültig für mich. Wenn du kannst, entkomme entweder diesem hässlichen "oder benutze stattdessen ein einfaches Zitat. – Antoine

Antwort

-1

Eine Regex zum Extrahieren von Daten aus Anführungszeichen wäre (?<=")[^"]*(?=")). Die Klammern stellen die erste Capture-Gruppe dar, die Sie mit \1 oder $1 extrahieren können.

Zum Analysieren von JSON (und zum Analysieren von Standards im Allgemeinen) wird jedoch empfohlen, eine Bibliothek zu verwenden; Es wird viel besser lesbar, verständlich und sicher sein als nur eine Regex, die nicht kanten Fälle abdecken kann (nicht sagen, dass es hier einige sein würde, aber dies im Allgemeinen als Beratung nehmen)

Zum Beispiel, wenn Sie verwenden Java, Gson ist eine nette Bibliothek zum Parsen und Erzeugen von JSON; Wenn Sie JavaScript verwenden, verwenden Sie einfach das eingebaute JSON-Objekt. Wenn Sie keine dieser Sprachen verwenden, gibt es sicher auch andere schöne Bibliotheken.

hoffe, das hilft

0

Wie wäre es : \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]?

Diese Regex sucht nach Text zwischen einem Doppelpunkt gefolgt von einem Leerzeichen und einem doppelten Anführungszeichen und einem weiteren doppelten Anführungszeichen gefolgt von einem Komman oder schließenden geschweiften Klammern. Der Text zwischen diesen muss aus etwas *, mindestens einem Zitat und etwas * bestehen.

* etwas bedeutet alles (einschließlich leerer String), das kein Zitat gefolgt von Komma oder schließender geschweifter Klammer enthält, da dies den Wert beenden würde.

Angewandt auf Ihr Beispiel (korrigiert, um das Komma durch einen Doppelpunkt zu ersetzen), gibt es Val"ue1 zurück.

String json = "{\"Key\": \"Value\", \"Key1\": \"Val\"ue1\"}"; 

Matcher m = Pattern.compile(": \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]").matcher(json); 

while (m.find()) 
{ 
    System.out.println(m.group(1)); 
} 
Verwandte Themen