PHP向JSON添加了不必要的索引
我在MongoDB集合中存储了以下JSON:PHP向JSON添加了不必要的索引,php,json,mongodb,Php,Json,Mongodb,我在MongoDB集合中存储了以下JSON: { "_id" : ObjectId("bbbbbaaaaaaaaaaaaa998a50"), "client" : "1", "services" : [ { "minutes" : 30, "label" : "Service 30" }, {
{
"_id" : ObjectId("bbbbbaaaaaaaaaaaaa998a50"),
"client" : "1",
"services" : [
{
"minutes" : 30,
"label" : "Service 30"
},
{
"minutes" : 60,
"label" : "Service 60"
}
],
"status" : "Active",
"lastModifiedOn" : ISODate("2016-01-14T12:17:08.780Z"),
"createdOn" : ISODate("2016-01-14T12:17:08.780Z"),
// ...
}
我只是将某些值传递给网站:
$catalog['services'] = $databaseCatalog->services;
$catalog['status'] = $databaseCatalog->status;
使用以下内容作为JSON传递:
var catalog = <?php echo json_encode($catalog) ?>;
问题:该索引(“0”、“1”)从何而来,如何防止发生?
请求的var转储:
array (size=1)
'services' =>
object(MongoDB\Model\BSONArray)[47]
public 0 =>
object(MongoDB\Model\BSONDocument)[40]
public 'minutes' => int 30
public 'label' => string 'Service 30' (length=10)
public 1 =>
object(MongoDB\Model\BSONDocument)[41]
public 'minutes' => int 60
public 'label' => string 'Service 60' (length=10)
问题的原因是MongoDB提供了一个对象,一旦映射到数组,该对象就会生成索引 解决方案是使用以下方法:
$catalog['services'] = array_values((array)$databaseCatalog->services);
$catalog['status'] = array_values((array)$databaseCatalog->status);
因为服务本身就是一个数组,所以这些是键
$catalog->services
?另外,如果$catalog
是一个对象,则不应将其视为数组:$catalog[arrayversion]=$catalog->objectversion
应发出警告。“不能将对象用作数组”或“尝试获取非对象的属性”后var_dump($catalog)额外的索引是由于服务数组的数字索引。这有点奇怪,因为JSON_FORCE_对象没有被传递给JSON_encode,但这是一种行为。我做了一个简单的测试,工作方式与您预期的一样<代码>$str='{U id:“BBBBB AAAAAAA 998A50”,“客户端”:“1”,“服务”:[{“分钟”:30,“标签”:“服务30”},{“分钟”:60,“标签”:“服务60”}],“状态”:“活动”}$obj=json_解码($str)代码>天哪,我刚刚花了几个小时试图找出如何轻松地将包含ArrayObject的MongoDB对象转换为PHP数组。“阵法”的演员们成功了!!!非常感谢。
$catalog['services'] = array_values((array)$databaseCatalog->services);
$catalog['status'] = array_values((array)$databaseCatalog->status);