我正在使用 JMSSerializerBundle 并且我注意到序列化的奇怪行为。
我正在使用 $jsonItems = $serializer->serialize($invoiceItems, 'json'); 其中 $invoiceitems 如下:
array(2) {
["services"]=>
array(3) {
[1]=>
array(1) {
[0]=>
object(stdClass)#757 (26) {
["__CLASS__"]=>
string(43) "Evo\BackendBundle\Entity\InvoiceItemService"
["id"]=>
int(4)
}
}
[2]=>
array(0) {
}
[3]=>
array(1) {
[1]=>
object(stdClass)#846 (26) {
["__CLASS__"]=>
string(43) "Evo\BackendBundle\Entity\InvoiceItemService"
["id"]=>
int(7)
}
}
}
["marchandises"]=>
array(0) {
}
}
我得到以下 JSON:
{"services"{
"1":[
{"realDiscount":0,"id":4,"createdAt":"2014-08-22","description":"test 2","type":1,"totalFlat":75,"discountFlat":0,"discountFlatType":"%","chargedHours":0,"chargedMinutes":0,"hourlyRate":0,"discountHourly":0,"discountHourlyType":"%","chargedQuantity":0,"unitPrice":0,"discountQuantity":0,"discountQuantityType":"%","total":75,"discount":0,"discountType":"%","position":1,"chargedTime":0}
],
"2":[],
"3":{
"1":{"realDiscount":0,"id":7,"createdAt":"2014-08-22","description":"test 22","type":3,"totalFlat":0,"discountFlat":0,"discountFlatType":"%","chargedHours":0,"chargedMinutes":0,"hourlyRate":0,"discountHourly":0,"discountHourlyType":"%","chargedQuantity":50,"unitPrice":1,"discountQuantity":0,"discountQuantityType":"%","total":50,"discount":0,"discountType":"%","position":1,"chargedTime":0}
}
},
"marchandises":[]}
为什么在我的 JSON 字符串中, services[1] 的格式与 services[3] 不同?如果我引用我的PHP数组,唯一的区别是services[1]的第一个键是0,而services[3]的第一个键是1。这就像JMS Serializer在它等于0时没有映射键. 最后,我想在 JSON 字符串中保持 key 等于 0。
我怎样才能做到这一点 ?