Wie analysiere ich ungültiges JSON mit nicht-quoted Schlüsseln mit ActiveSupport 3 (Rails)

9

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

    
Javier Fonseca 03.02.2011, 17:33
quelle

3 Antworten

2

Ich würde einen regulären Ausdruck verwenden, um dieses ungültige JSON zu beheben:

%Vor%     
jmonteiro 17.08.2011 21:11
quelle
0

So etwas?

%Vor%     
steenslag 03.02.2011 20:38
quelle
0

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:

%Vor%

Dann erfasst es den Schlüssel selbst, der sich aus Buchstaben, Ziffern und Unterstrichen zusammensetzt (für die Regex eine \w Zeichenklasse bietet):

%Vor%

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%     
Ben Lee 05.12.2012 23:45
quelle

Tags und Links