JsonHelper¶
\nn\t3::JsonHelper()¶
Das Script hilft beim Konvertieren und Parsen von JavaScript-Objekt-Strings in ein Array.
$data = \Nng\Nnhelpers\Helpers\JsonHelper::decode( "{title:'Test', cat:[2,3,4]}" );
print_r($data);
Der Helper ermöglicht es, im TypoScript die JavaScript-Object-Schreibweise zu nutzen und über den {nnt3:parse.json()}
ViewHelper in ein Array zu konvertieren.
Das ist praktisch, wenn z.B. Slider-Konfigurationen oder andere JavaScript-Objekte im TypoScript definiert werden sollen, um sie später in JavaScript zu nutzen.
Anderes Anwendungsbeispiel: Man möchte die "normalen" JS-Syntax in einer .json
-Datei nutzen, statt dem JSON-Syntax.
Schauen wir uns ein Beispiel an. Dieser Text wurde in eine Textdatei geschrieben und soll per PHP geparsed werden:
// Inhalte einer Textdatei.
{
beispiel: ['eins', 'zwei', 'drei']
}
PHP würde bei diesem Beispiel mit json_decode()
einen Fehler melden: Der String enthält Kommentare, Umbrüche und die Keys und Values sind nicht in doppelte Anführungszeichen eingeschlossen. Der JsonHelper bzw. der ViewHelper $jsonHelper->decode()
kann es aber problemlos umwandeln.
So könnte man im TypoScript Setup ein JS-Object definieren:
// Inhalt im TS-Setup
my_conf.data (
{
dots: true,
sizes: [1, 2, 3]
}
)
Die Mischung irritiert ein wenig: my_conf.data (...)
öffnet im TypoScript einen Abschnitt für mehrzeiligen Code.
Zwischen den (...)
steht dann ein "normales" JavaScript-Object.
Das lässt sich im Fluid-Template dann einfach als Array nutzen:
{nnt3:ts.setup(path:'my_conf.data')->f:variable(name:'myConfig')}
{myConfig->nnt3:parse.json()->f:debug()}
Oder als data-Attribut an ein Element hängen, um es später per JavaScript zu parsen:
{nnt3:ts.setup(path:'my_conf.data')->f:variable(name:'myConfig')}
<div data-config="{myConfig->nnt3:parse.json()->nnt3:format.attrEncode()}">...</div>
Dieses Script basiert überwiegend auf der Arbeit von https://bit.ly/3eZuNu2 und wurde von uns für PHP 7+ optimiert.Alles an Ruhm und Ehre bitte in diese Richtung.
Overview of Methods¶
\nn\t3::JsonHelper()->decode($str, $useArray = true
);¶
Wandelt einen JS-Object-String in ein Array um.
$data = \Nng\Nnhelpers\Helpers\JsonHelper::decode( "{title:'Test', cat:[2,3,4]}" );
print_r($data);
Die PHP-Funktion json_decode()
funktioniert nur bei der JSON-Syntax: {"key":"value"}
. Im JSON sind weder Zeilenumbrüche, noch Kommentare erlaubt.
Mit dieser Funktion können auch Strings in der JavaScript-Schreibweise geparsed werden.
@return array|string
\nn\t3::JsonHelper()->encode($var
);¶
Konvertiert eine Variable ins JSON Format.
Relikt der ursprünglichen Klasse, vermutlich aus einer Zeit als es json_encode()
noch nicht gab.
\Nng\Nnhelpers\Helpers\JsonHelper::encode(['a'=>1, 'b'=>2]);
@return string;
\nn\t3::JsonHelper()->removeCommentsAndDecode($str, $useArray = true
);¶
Entfernt Kommentare aus dem Code und parsed den String.
\Nng\Nnhelpers\Helpers\JsonHelper::removeCommentsAndDecode( "// Kommentar\n{title:'Test', cat:[2,3,4]}" )
@return array|string