Нравится нам это или не понравилось, мое окончательное решение состояло в том, чтобы вернуться к теперь устаревшему JSON::Syck, который делает именно то, что я хочу. Ниже приведен пример несовпадения логической сериализации без муха в JSON.
use JSON::Syck;
use URI;
use feature ':5.10';
say JSON::Syck::Dump(
bless { foo => URI->new("http://www.evancarroll.com") }
)
Я написал автору о JSON::XS он не игра для добавления функциональности.Вот некоторые из текста (вырвано из контекста из многочисленных сообщений, чтобы показать, почему эта функция не существует) от Marc Lehmann в формате JSON :: XS сопровождающим:
Нет, потому что вы используете JSON и не Perl. Perl, очевидно, способен представлять любые данные Perl структура, но JSON нет, поэтому вы должны указать, что делать. Многие люди наивно запрашивают что-то вроде «просто дамп структуры данных», но JSON даже не может представлять все структуры данных, не являющиеся объектами, .
...
Ваш вопрос так: почему я не могу послать этот 1MB Jpeg изображение как текстовый файл - просто потому, что ASCII не может представлять октета.
...
Или, может быть, вы justw муравья бросить некоторый мусор на него и ожидать JSON :: XS делать то, что хорошо для вас (но неправильно для других людей) - есть просто нет способ для JSON :: XS магически угадать что вы хотите.
...
TO_JSON это. Все остальное просто дикое угадывание.
...
Тогда, возможно, вы должны попробовать вещи, которые JSON фактически может представлять. Бросив некоторый объект иерархию на него, и в надежде это будет делать «правильные вещи» является явно плохо программной инженерии - попробуйте не прибегать хак, когда ваш protocl требует JSON, а затем отправить JSON, не ожидать JSON библиотеку, чтобы исправить ваше недопустимое сообщение .
Я не знаю, как ответить на это, кроме Я НЕ УХОДЯ. ПРОСТО РАБОТАЙ! LIKE :: SYCK. Я не ожидаю, что объекты будут отлично преобразованы в JSON. Но, я думаю, я попадаю в 80%, что просто хочу, чтобы он работал. Я использую JSON для импорта jQuery, не выполняющего банковских операций во время операции на головном мозге. В конечном счете, я не хочу использовать особую роль ... Я хочу, чтобы все, что было послано к нему, было изменено для меня до уровня, который делает его полезным в ответ на запрос JQuery JSON.
UPDATE
К сожалению, я пропустил эти ответы, пока кто-нибудь не сказал, что я троллинг в неродственной среде. MooseX :: Storage не работает для классов, отличных от Moose, мне нужен общий способ представления stash в формате JSON. К сожалению, некоторые из этих членов тайника являются объектами Муз. XML :: Simple может это сделать, Data::Dumper
может сделать это, JSON :: Syck может это сделать, список можно продолжить - я просто хочу, чтобы это было сделано. Это не должно быть 1: 1 с Perl, и, честно говоря, я хочу, чтобы это было сделано довольно близко к тому, как это делается JSON::Syck
. Мой аргумент здесь: «Как мне получить JSON::XS
для работы точно так же, как JSON::Syck
в настоящее время?» И ваш ответ - вы не можете.Поэтому я не использовал другое решение. Написание кода стоит денег, почему я хочу написать to_JSON
, если Syck уже делает это правильно ... Я хотел бы сказать, что бремя лежит на nay-sayers, чтобы показать, что Syck сериализует мода, которая нежелательна. Кроме того, имейте в виду, что JSON::Syck
был посеян Audry, который ни в коем случае не является троллем, идиотом или «поврежден мозгом»; или любые другие термины, которые меня бросают. Я остановлюсь на этом: отсутствие плохой сериализации маршрута JSON::Syck
и желаемый результат уже just-working заставляет меня полагать, что это хороший выбор для меня. И что может сделать MooseX :: *: JSON по-другому с произвольным объектом Moose? Почему, по вашему мнению, код не может быть записан для принятия объекта Moose, а не метода на нем? Если вы считаете иначе, ответьте на что-то существенное - я бы хотел увидеть лучший ответ. Благодарю. (направленный на @jrockway и @Ether)
Я записываю [отчет об ошибке на rt для 'C: V: JSON'] (https://rt.cpan.org/Ticket/Display.html?id=60564&results = af4f9b8bf7a79ca52896b9b59dbf480a) только для записи. –