java - 如何将 Java Map 序列化为 PHP 的数组序列化格式
问题描述
我想转换HashMap
为 a String
,它对应于 PHP 的 Array 序列化格式,如下所述:
http://php.net/manual/en/function.serialize.php
例如:
a:5:{s:5:"width";i:450;s:6:"height";i:352;s:4:"file";s:32:"2018/09/Sawtooth-Oak_450_a-1.jpg";s:5:"sizes";a:9:{s:9:"thumbnail";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-300x235.jpg";s:5:"width";i:300;s:6:"height";i:235;s:9:"mime-type";s:10:"image/jpeg";}s:32:"twentyseventeen-thumbnail-avatar";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-100x100.jpg";s:5:"width";i:100;s:6:"height";i:100;s:9:"mime-type";s:10:"image/jpeg";}s:21:"woocommerce_thumbnail";a:5:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-250x250.jpg";s:5:"width";i:250;s:6:"height";i:250;s:9:"mime-type";s:10:"image/jpeg";s:9:"uncropped";b:1;}s:18:"woocommerce_single";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-350x274.jpg";s:5:"width";i:350;s:6:"height";i:274;s:9:"mime-type";s:10:"image/jpeg";}s:29:"woocommerce_gallery_thumbnail";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-100x100.jpg";s:5:"width";i:100;s:6:"height";i:100;s:9:"mime-type";s:10:"image/jpeg";}s:12:"shop_catalog";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-250x250.jpg";s:5:"width";i:250;s:6:"height";i:250;s:9:"mime-type";s:10:"image/jpeg";}s:11:"shop_single";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-350x274.jpg";s:5:"width";i:350;s:6:"height";i:274;s:9:"mime-type";s:10:"image/jpeg";}s:14:"shop_thumbnail";a:4:{s:4:"file";s:32:"Sawtooth-Oak_450_a-1-100x100.jpg";s:5:"width";i:100;s:6:"height";i:100;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
我从以下测试地图开始:
HashMap images2 = new HashMap();
images2.put("test1", "t1");
imagesArray.put("width", image.getWidth());
imagesArray.put("height", image.getHeight());
imagesArray.put("file", destinationFile);
imagesArray.put("sizes", images2);
String jsonResult = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(imageMap);
System.out.println(jsonResult);
结果是:
{
"file" : "/images/bolivia.jpg",
"sizes" : {
"test1" : "t1"
},
"width" : 450,
"height" : 450
}
解决方案
Java 不使用 PHP 的数组序列化格式,因此您必须自己编写或更改方法。您有以下选择:
遍历您的条目,
Map
并为每个条目输出其类型、s
forString
、i
forint
等以及其余信息(aString
包括长度等)从您的 PHP 脚本中,更改方法,而不是使用 JSON 读取 PHP 的数组序列化。这更像是一个开放的事实标准,您也可以使用其他编程语言,因为现在大多数语言都支持 JSON 或有简单的库来支持 JSON。
使用将 Java 对象保存为 PHP 的序列化格式的库。如果您无法控制 PHP 脚本并且绝对不能在不破坏其他内容的情况下更改它,我只会推荐此选项。如果您不拥有 PHP 代码,或者您无法有效地维护它,这可能是一个可行的选择。快速搜索执行此操作的 Java 库,例如:
推荐阅读
- twilio - 如何使用 Flutter 制作 Web 应用并集成 twillo vedio 聊天 api?
- python - Python Networkx:边缘没有采用正确的颜色,同时指定节点位置
- amazon-cloudformation - Cloudformation API GW 集成响应/响应标头
- monitoring - Stackdriver 和 Airflow 执行
- javascript - 如何在 Angular 中进行两个相关的 POST 调用?
- java - java dbcp2多线程连接访问
- python - 使用 iloc 在 pandas 数据框中选择值时保持浮点精度
- javascript - 为什么从 html 收集的数据没有传递给 JavaScript 类?
- php - 使用 ffmpeg 从视频中生成提取数量的缩略图
- wcf - 如何在调用另一个 SOAP 服务的 wcf 服务中设置 WSS -Time to Live 的值?