PHP json - String editieren?

2 Antworten

Zunächst mal ist die Änderung, die du an dem JSON-Objekt machen willst, so nicht gültig - bzw. de facto ist sie zwar nicht ungültig, man sollte aber darauf verzichten. Du versucht einem JSON-Objekt, das bereits ein Key-Value Pair mit dem Key "token" besitzt, noch mal ein Pair mit dem Key "token" hinzuzufügen. Duplicate Keys sind zwar nicht invalide laut offiziellem Schema, können aber, gerade in Implementationen in Programmiersprachen wie PHP, zu mehr Problemen führen als dir lieb ist.

Und tatsächlich ist es z.B. in PHP mit den JSON-Methoden unmöglich, einen doppelten Key hinzuzufügen, nennt sich Keyspace Collision. Rein theoretisch könnte man meinen, das würde so gehen:

$json_str = '[{"token":"e886fc6b1629a0f01b7cd2cadd179bfd5f94fe68"}]';
$json = json_decode($json_str);
$json[0]['token'] = '123234';
$json_str = json_encode($json);

Allerdings bekommst du dann diesen String als Ergebnis:

[{"token":"123234"}]

PHP denkt eben (logischerweise), dass du den Wert mit dem Key "token" bearbeiten willst, nicht noch einen Wert mit dem Key "token" hinzufügen willst. Was also funktionieren würde, wäre das hier zum Beispiel (ich gehe sogar davon aus, dass du tatsächlich das hier machen wolltest):

$json_str = '[{"token":"e886fc6b1629a0f01b7cd2cadd179bfd5f94fe68"}]';
$json = json_decode($json_str);
$json[1]['token'] = '123234';
$json_str = json_encode($json);

Dann bekommst du diesen String als Ergebnis:

[{"token":"e886fc6b1629a0f01b7cd2cadd179bfd5f94fe68"}, {"token":"123234"}]

Du fügst daher damit dem äußeren (JSON-)Array noch ein Objekt hinzu, welches den Key token beinhaltet.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung