私は 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 であるということです。0 に等しい場合、JMS シリアライザーがキーをマッピングしていないようです。最後に、JSON 文字列でキーを 0 に等しくしたいと思います。
どうやってやるの ?