изменить имя json key

Я генерирую json из массива с помощью json_encode() , он работает правильно, но он использует значение key: из массива, как обычно. но я хочу изменить имя ключа только в json-выходе .. возможно ли это сделать? или я должен подготовить ключ json: значения самостоятельно?

Пример:

 $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); 

O / P

 {"a":1,"b":2,"c":3,"d":4,"e":5} 

Мне нужно .

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

edit: я не могу отредактировать исходный массив .. (сгенерированный с помощью framweork)

Solutions Collecting From Web of "изменить имя json key"

Только если вы переписываете себя. Вы можете использовать:

 $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); 

Не уверен, что это то, к чему вы стремились.

Вы всегда можете json_decode а затем перекодировать его. Но это будет проще всего, если вы просто подготовите свои ключи, прежде чем закодировать их.

Существует еще один вариант, который я описал здесь . Основная идея состоит в том, чтобы рассматривать JSON как строку, а затем использовать str_replace или preg_replace (str_replace for regexp).

Для вашего дела есть код.

 $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);