изменить имя ключа json [json, созданный с помощью json_encode] - PullRequest
6 голосов
/ 07 мая 2011

Я генерирую json из массива, используя json_encode(), он работает правильно, но он использует ключ: значение из массива, как обычно.но я хочу изменить имя ключа только в выводе 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)

Ответы [ 3 ]

5 голосов
/ 07 мая 2011

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

$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 голосов
/ 31 октября 2015

Есть еще один вариант, который я описал здесь .Основная идея состоит в том, чтобы рассматривать JSON как строку, а затем использовать str_replace или preg_replace (str_replace для 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);
0 голосов
/ 07 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...