Mit Variable ein JSON Objekt auslesen

Hallo liebes HTML Forum,
ich habe eine JSON Datei mit Folgendem Format:
„Stefan“: 0,5
„Andreas“: 2 und so weiter,
ich möchte nun in php Den wert zum dazugehörigen Namen ausgeben lassen. Dazu möchte ich allerdings nichts direkt den Namen ansprechen, sondern aus einer bestimmten Variablen, in der der Name gespeichert ist.
Hier mal der Code:
[PHP]
$nam=$_GET[‚nam‘];

$names = file_get_contents('all.json',true);
$string2=$names;
$obj2=json_decode($string2);
$price2=$obj2->$nam;
$price2=(float)($price2);
echo $price2;

[/PHP]
Der Fehler scheint also bei der Abfrage auf $nam zu liegen. Es scheint als wäre es ein Syntax Fehler.
Ich habe schon versucht das in den Manuals nachzulesen, hab dazu allerdings nichts gefunden :frowning:

Vielen Dank schonmal für Eure Mühen.

beste Grüße

Stefan

Vorab, es ist sehr unsauber ‚variable Variablen‘ zu verwenden.
Ich würde das sogar mit einem Terroranschlag vergleichen.

Besser wäre folgende Struktur:

[ { 'name': 'Stefan', 'price': 0.5 }, { 'name': 'Andreas', 'price': 2 } ]

Wenn du also noch die Möglichkeit hast - ändere das unbedingt.

Liefere dir trotzdem die Lösung:
[PHP]$price2 = $obj2->{$nam};[/PHP]

Siehe auch: http://php.net/manual/de/language.variables.variable.php

Hallo scbawik,
leider ist es mir nicht möglich die Struktur zu ändern. Ich weiß, dass deine Struktur die einzig richtige ist, aber ich habe Sie so vorgegeben bekommen und aufgrund der Menge an Daten ist es nicht möglich daran etwas zu ändern…
Ich habe es so auch schon versucht, liefert aber das gleiche Ergebnis :frowning:

Was liefert:
[PHP]var_dump($obj2);[/PHP]

Das Problem ist, $nam ist so lange leer, bis eine Anfrage erfolgt und ich mit $_GET den namen bekomme und in eine Variable speicher. Wenn dies nicht geschieht, ist diese leer.
Deshalb bekomme ich den Fehler
Cannot access empty property in /var/www/html/name.php on line 22

Dann verstehe ich dein Problem aber nicht?
$_GET[‚nam‘] ist Voraussetzung um das Script aufzurufen.
Wenn es Optional sein soll, packst du das Ganze eben in ein [PHP]if(array_key_exists(‚nam‘, $_GET))) {[/PHP]

Verstehe grad nicht was du meinst ? array_key_exists prüft doch ob etwas enthalten ist ?
Wenn das Script ausgeführt wird, ist $_GET[‚nam‘] ja nicht mehr leer, dann sollte dabei kein Problem auftreten. hm

Ebenso.

Wenn [PHP]$nam = $_GET[‚nam‘][/PHP] leer ist, darf es erst gar nicht bis zu [PHP]$price2 = $obj2->$nam[/PHP] kommen.
Das würde dann nämlich dem entsprechen: [PHP]$price2 = $obj2->{null}[/PHP]
Was den Fehler „Cannot access empty property“ auslöst.

Vielen Dank, ja das war der Fehler, funktioniert nun einwandrei. Danke !

Hallo liebe Leute,
ich stehe nochmal vor einem kleinen Problem und dachte mir, da es auch mit JSON und dem auslesen zu tun hat, poste ich es direkt hier nochmal rein.
Also ich habe ein folgenden Aufbau:
[PHP]
{

"name":
{
    "1586670077416875609":
    {
        "id":"1586670077416875609",
        "classid":"149742033",
        "instanceid":"0",
        "amount":"1",
        "pos":1
    },
    "1586670077416875905":
    {
        "id":"1586670077416875905",
        "classid":"149742033",
        "instanceid":"0",
        "amount":"1",
        "pos":2
    },

[/PHP]
Normal würde er zugriff auf das Objekt so aussehen (content wurde ausgelesen und json_decode durchgeführt.):
[PHP]$classid=$obj->{‚name‘}->[‚1586670077416875609‘]->{‚classid‘}[/PHP]

Das Problem ist, die Nummer ist variabel. Meine Frage ist also, wie kann ich auf die classid zugreifen, ohne die darüberliegende Nummer zu kennen ?

Danke abermals für Eure Hilfe :wink:

beste Grüße