我使用必须通过MongoDB
从PHP
读取一些数据。
当我将MongoDB
结果转换为Json
时,我得到如下结果:
{
"records":
[
{
"_id":
{
"id": "567f18f21e2e328206d3d91e"
},
"title": "test",
"price": 5000,
"date": "1394-09-05 11:30",
"images":
[
{
"_id":
{
"id": "567f18f21e2e328206d3d91f"
},
"url": "a"
},
{
"_id":
{
"id": "567f18f21e2e328206d3d920"
},
"url": "x"
},
{
"_id":
{
"id": "567f18f21e2e328206d3d921"
},
"url": "c"
}
]
}
]
}
正如您所看到的,我们有如下ID:
"_id":
{
"$id": "567f18f21e2e328206d3d91e"
},
当我想用Java解析这个json时,它会给我带来一些问题,我想把它转换成这样的东西:
{
"records":
[
{
"id": "567f18f21e2e328206d3d91e"
"title": "test",
"price": 5000,
"date": "1394-09-05 11:30",
"images":
[
{
"id": "567f18f21e2e328206d3d91f",
"url": "a"
},
{
"id": "567f18f21e2e328206d3d920",
"url": "x"
},
{
"id": "567f18f21e2e328206d3d921",
"url": "c"
}
]
}
]
}
我该怎么办?
我不能使用foreach
方法来编辑这个数组,因为我有无限的子数组
答案 0 :(得分:1)
首先decode json数据并将其转换为数组。从转换后的数组中,您可以格式化预期的模式。 array_map可以帮助您。
$data = json_decode($old_json_data, true);
$new_data_format = [];
if(isset($data['records'])){
$data = $data['records'];
$new_data_format = array_map(function($val){
return [
'id' => $val['_id']['id'],
'title' => $val['title'],
'price' => $val['price'],
'date' => $val['date'],
'images' => array_map(function($v){
return [
'id' => $v['_id']['id'],
'url' => $v['url'],
];
}, $val['images'])
];
}, $data);
}
$new_data_format = json_encode(['records' => $new_data_format]);
希望它会对你有所帮助。