PHP中如何使用json_encode将对象转换为外层为数组的JSON格式
解决方法
首先明确你之前使用的JSON_OBJECT_AS_ARRAY参数的作用:它仅会将编码过程中遇到的内层对象转换为关联数组格式,不会主动为最外层新增数组包装。你当前输出外层为{}的核心原因是,你传入json_encode的第一个参数$myObject本身是对象/关联数组类型,json_encode对非索引数组的结构默认输出为JSON对象格式。
要实现外层为[]的JSON格式,只需要将你要编码的内容外层套一层索引数组即可,修改代码如下:
// 将原对象作为索引数组的第一个元素传入,保留JSON_OBJECT_AS_ARRAY参数保证内层结构符合预期 echo json_encode([$myObject], JSON_OBJECT_AS_ARRAY);
修改后输出的结构示例:
[ { "SALDOC": [ { "SERIES": null, "TRDR": null, "PAYMENT": "2", "SHIPMENT": "", "TRNDATE": "2019-03-11 07:57:38", "REMARKS": null, "DISC1VAL": "0.0000", "SALESMAN": null, "SHIPKIND": null, "CCCCLCOURIERWEIGHT": "1.0000" } ], "ITELINES": [ { "LINENUM": null, "VAT": null, "MTRUNIT4": null, "MTRCATEGORY": null, "MTRL": null, "QTY1": "1.0000", "PRICE": "15.0000" } ], "MTRDOC": [ { "SHPZIP": "test", "SHPCITY": "teset", "SHIPPINGADDR": "test", "SHPDISTRICT": 100 } ], "SRVLINES": [], "EXPANAL": [] } ]
如果你的需求是将外层的字符串键也转为索引数组(丢弃原键名),可以先将对象转为数组后调用array_values处理:
echo json_encode(array_values((array)$myObject), JSON_OBJECT_AS_ARRAY);
这种方式输出的外层数组不会保留SALDOC、ITELINES这类键名,按实际需求选择即可。
内容的提问来源于stack exchange,提问作者gabtzi
相关产品推荐
相关产品推荐

