Ich muss bestimmte ungültige JSON in Ruby analysieren.
Etwas wie:
%Vor%Wie Sie sehen, ist es ungültig, weil der Hash-Schlüssel nicht in Anführungszeichen steht, sollte
sein %Vor%Aber das kann nicht geändert werden und ich muss die Schlüssel ohne Anführungszeichen analysieren.
Ich könnte es mit ActiveSupport 2.x analysieren, aber ActiveSupport 3 erlaubt mir nicht. Es wirft mich:
%Vor%Übrigens ist es eine Ruby-Anwendung, die einige Rails-Bibliotheken verwendet, aber es ist keine Rails-Anwendung
Vielen Dank im Voraus
Hier ist ein etwas robuster Regex, den Sie verwenden können. Es ist nicht perfekt - speziell funktioniert es nicht in einigen Fällen, wo die Werte selbst json-ähnlichen Text enthalten, aber es wird in den meisten allgemeinen Fällen funktionieren:
%Vor% Zuerst wird entweder nach einem {
oder nach ,
gesucht, was die Optionen für das Zeichen vor einem Schlüsselnamen sind (erlaubt auch eine beliebige Menge an Leerzeichen mit \s*
). Es erfasst dies als eine Gruppe:
Dann erfasst es den Schlüssel selbst, der sich aus Buchstaben, Ziffern und Unterstrichen zusammensetzt (für die Regex eine \w
Zeichenklasse bietet):
Schließlich stimmt es überein, was einem Schlüsselnamen folgen muss; ein Doppelpunkt, gefolgt von einem Anfangszitat (für einen Zeichenfolgenwert) oder einer Ziffer (für einen numerischen Wert). Erlaubt auch zusätzliche Leerzeichen und erfasst das Ganze in einer Gruppe:
%Vor%Bei jeder Übereinstimmung werden die drei Teile wieder zusammengefügt, aber mit Zitaten um den Schlüssel herum (also um die Fanggruppe 2 herum zitiert):
%Vor%Tags und Links ruby ruby-on-rails-3 json