6
votes

Modifier le nom de la clé JSON [JSON générée à l'aide de JSON_ENCODE]

Je génère JSON à partir d'un tableau à l'aide de json_encode () code>, il fonctionne correctement, mais il utilise la clé: valeur de la matrice, comme d'habitude. Mais je veux changer le nom de la clé uniquement dans la sortie JSON. Est-il possible de le faire? Ou devrais-je préparer la clé JSON: les valeurs moi-même manuellement?

Exemple: P>

{"foo":1,"something":2,"bar":3,"foo":4,"baz":5}


3 commentaires

D'où viennent le foo quelque chose que les clés de barres?


Si vous ne pouvez pas modifier le tableau d'origine, créez simplement une nouvelle à l'aide des valeurs de l'original, puis convertissez-la en JSON.


Ce sera commun pour chaque tâche. Je veux le nom:, Tapez:, taille: .. et ça ne changera pas .. - Merci!


4 Réponses :


0
votes

Vous pouvez toujours JSON_DECODE IT, puis re-encode. Mais cela va être plus facile si vous préparez simplement vos clés avant de l'encoder.


0 commentaires

7
votes

Seulement si vous vous réécrivez 'm vous-même. Vous pouvez utiliser:

$rewriteKeys = array('a' => 'foo', 'b' => 'something', 'c' => 'bar', 'd' => 'foo', 'e' => 'baz');

$newArr = array();
foreach($arr as $key => $value) {
  $newArr[ $rewriteKeys[ $key ] ] = $value;
}

echo json_encode($newArr);


0 commentaires

0
votes

Il y a une autre option que j'ai décrite ici . L'idée principale est de considérer JSON comme une chaîne, puis d'utiliser str_replace ou preg_replace (str_replace pour REGEXP).

Il existe un code pour votre cas. P>

$mapping_array  = array('a' => 'foo', 'b' => 'something', 'c' => 'bar', 'd' => 'foo', 'e' => 'baz');

$tmp_arr =  array_map(function($k){ return '/\b'.$k.'\b/u'; }, array_keys($mapping_array));

$new_json =  preg_replace($tmp_arr, array_values($mapping_array), $old_json);


0 commentaires

0
votes

Ceci peut être une réponse courte:

foreach ($list as $key => $val) {
    $newList[$key] = [
        'foo'   =>  $val['a'],
        'something' =>    $val['b'],
        'bar' => $val['c'],
        'foo' => $val['d'],
        'baz' => $val['e'],
    ];
}


0 commentaires