更改json密钥名称[使用json_encode生成的json]

时间:2011-05-06 22:06:57

标签: php json

我使用json_encode()从数组生成json,它正常工作,但它像往常一样使用数组中的key:value。但我想只在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}

编辑:我无法编辑原始数组..(使用framweork生成)

4 个答案:

答案 0 :(得分:5)

只有你自己改写。你可以使用:

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

不确定这是不是你的目标。

答案 1 :(得分:0)

您可以随时json_decode然后对其进行重新编码。但如果您在编码之前准备好密钥,那么这将是最简单的。

答案 2 :(得分:0)

我还有另一个选项here。主要思想是将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);

答案 3 :(得分:0)

这可能是一个简短的答案:

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