我使用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生成)
答案 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'],
];
}