2016-07-19 32 views
2

Lassen Sie uns sagen, dass ich die folgende JSON-String haben: in einer aktualisierten JSON-StringDecode vollständige Palette und kodieren Teil davon

$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 

Wie würde ich nur die Eigenschaft ‚Name‘ angezeigt werden? Zum Beispiel möchte ich den Code in das in einer aktualisierten Variable $json2 umgewandelt werden:

$json2 = '[{"Name":" Jim"},{"Name":" Bob"}]'; 

ich dies mit dem Code unten zu tun haben versucht, aber die folgende Fehlermeldung:

Notice: Undefined index: Name on line 9

$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$decode = json_decode($json, 'false'); 
$json2 = json_encode($decode['Name']); 

echo $json2; 

$json2 gibt 'null' zurück.

+1

$ decode [0] ['Name'] –

+1

Sie haben * ein Array * von Elementen, nicht nur ein Element. Sie müssen mindestens die Elemente durchlaufen. – deceze

+0

@ B.Kocaman Das gibt nur den Vornamen zurück. –

Antwort

2
$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$decoded = json_decode($json, true); 

$transformed = array_map(function (array $item) { 
    return array_intersect_key($item, array_flip(['Name'])); 
}, $decoded); 

$json2 = json_encode($transformed); 

Die array_intersect_key ist the easiest method spezifischen Schlüssel aus einem Array zupfen, und es in einem array_map über eine ganze Reihe zu tun ist, was Sie suchen.

2

Für PHP 5.3+:

<?php 
$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$decode = json_decode($json, true); 

$newArray = array_map(function ($array) { 
    return ['Name' => $array['Name']]; 
}, $decode); 

echo json_encode($newArray); 
+0

Hallo, vielen Dank für Ihre Antwort. Das gibt '[" Jim "," Bob "] zurück, während ich gerne" [{"Name": "Jim"}, {"Name": "Bob"}] '' –

+0

Ihr 'false' bedeutet wahr:) – splash58

+0

@TheCodesee aktualisiert die Antwort. prüfen. –