首页 > 解决方案 > 如何将 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
}

标签: javaarraysserialization

解决方案


Java 不使用 PHP 的数组序列化格式,因此您必须自己编写或更改方法。您有以下选择:

  1. 遍历您的条目,Map并为每个条目输出其类型、sfor Stringiforint等以及其余信息(aString包括长度等)

  2. 从您的 PHP 脚本中,更改方法,而不是使用 JSON 读取 PHP 的数组序列化。这更像是一个开放的事实标准,您也可以使用其他编程语言,因为现在大多数语言都支持 JSON 或有简单的库来支持 JSON。

  3. 使用将 Java 对象保存为 PHP 的序列化格式的库。如果您无法控制 PHP 脚本并且绝对不能在不破坏其他内容的情况下更改它,我只会推荐此选项。如果您不拥有 PHP 代码,或者您无法有效地维护它,这可能是一个可行的选择。快速搜索执行此操作的 Java 库,例如:

https://github.com/marcospassos/java-php-serializer


推荐阅读