Как сериализовать карту Java в формат сериализации массива PHP - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу преобразовать HashMap в 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
}

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Хорошо, я нашел решение - я буду использовать

<!-- https://mvnrepository.com/artifact/com.xk72/pherialize -->
<dependency>
    <groupId>com.xk72</groupId>
    <artifactId>pherialize</artifactId>
    <version>1.2.4</version>
</dependency>
0 голосов
/ 22 сентября 2018

Рассмотрите возможность использования protobufs Google (буферов прототипов).Протобуфы реализованы на нескольких языках, включая Java, PHP, Python, C ++ и т. Д.

Преимущество независимости от языка - вы определяете структуру буфера и компилируете файл определения в язык (и).) по вашему выбору.

Вот тривиальный пример protobuf с 2 полями, просто чтобы дать представление:

syntax = "proto2";
message CookiejarTransaction {
    optional string action = 1; // Action is either "bake" or "eat"
    optional uint32 amount = 2; // Amount is number of cookies
}

Отказ от ответственности: я не заинтересован в Protobufs, кроме счастливого разработчикакто пользуется инструментом.

https://developers.google.com/protocol-buffers/

0 голосов
/ 21 сентября 2018

Java не использует формат сериализации PHP, поэтому вы должны написать его самостоятельно или изменить подход.У вас есть следующие опции:

  1. Перебирать записи вашего Map и для каждой записи выводить свой тип, s для String, i для intи т.д. вместе с остальной информацией (a String включает длину и т. д.)

  2. Из вашего PHP-сценария измените подход и вместо чтения сериализации PHP используйте JSON.Это скорее открытый стандарт defacto, и вы сможете использовать и другие языки программирования, поскольку большинство языков поддерживают JSON или имеют простые библиотеки для этого в наши дни.

  3. Использование библиотекикоторый сохраняет объекты Java в формате сериализации PHP.Я бы порекомендовал эту опцию, только если у вас нет контроля над сценарием PHP, и вы абсолютно не можете изменить его, не нарушив что-либо еще.Если вы не владеете кодом PHP или не можете эффективно его поддерживать, это может быть приемлемым вариантом.Выполните быстрый поиск библиотек Java, которые делают это, например:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...