Perl: проверка элементов JSON на идентичность

Модератор: Модераторы разделов

IMB
Сообщения: 2516
ОС: Debian

Perl: проверка элементов JSON на идентичность

Сообщение IMB »

Доброго дня!
Сетевой ресурс проедоставляет некие данные в XML и JSON.
Для проверки XML я использую XSD и XML::Validator::Schema (http://search.cpan.org/~samtregar/XML-Validator-Schema-1.10/Schema.pm).
Для проверки JSON существует аналогичный модуль JSON::Schema (http://search.cpan.org/~tobyink/JSON-Schema-0.016/lib/JSON/Schema.pm), но он требует более новый perl, поэтому я пока его не хочу использовать.
Пример JSON

Код: Выделить всё

{
   "resource" : [
      {
         "url" : "http://127.0.0.1:3000/rest/node/help",
         "description" : "Node parameters"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/device/help",
         "description" : "Device parameters"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/cpu/help",
         "description" : "Device CPU load"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/temperature/help",
         "description" : "Device CPU temperature"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/memory/help",
         "description" : "Device memory"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/disk/help",
         "description" : "Device free disk space"
      },
      {
         "url" : "http://127.0.0.1:3000/rest/queue/help",
         "description" : "Device queue"
      }
   ]
}

Сейчас для проверки корректности данных я использую цикл по элементам, но это может быть не оптимально при большом количестве элементов.
Вопрос - возможно ли как-то сравнить идентичность структур элементов между собой не используя цикл?
Спасибо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Perl: проверка элементов JSON на идентичность

Сообщение Bizdelnick »

IMB писал(а):
10.12.2014 12:34
он требует более новый perl

А у Вас какой? Неужели ниже 5.10?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2516
ОС: Debian

Re: Perl: проверка элементов JSON на идентичность

Сообщение IMB »

Bizdelnick писал(а):
10.12.2014 12:58
А у Вас какой? Неужели ниже 5.10?

Чуть более свежий ;) 5.14.2, а там требуется 5.20.x
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Perl: проверка элементов JSON на идентичность

Сообщение Bizdelnick »

Так по ссылке все тесты проходят на 5.10. Откуда инфа про 5.20?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2516
ОС: Debian

Re: Perl: проверка элементов JSON на идентичность

Сообщение IMB »

В зависимосятьх идёт match::simple:

Код: Выделить всё

cd match-simple-0.009/
$ debuild
 dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: source package libmatch-simple-perl
dpkg-buildpackage: source version 0.009-1
................
make[1]: Leaving directory `/tmp/match-simple-0.009'
   dh_auto_test
make[1]: Entering directory `/tmp/match-simple-0.009'
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t

#   Failed test 'use match::simple;'
#   at t/01basic.t line 27.
#     Tried to use 'match::simple'.
#     Error:  List::Util version 1.33 required--this is only version 1.25 at /tmp/match-simple-0.009/blib/lib/match/simple.pm line 8.
# BEGIN failed--compilation aborted at /tmp/match-simple-0.009/blib/lib/match/simple.pm line 8.

Поиск List::Util вывел на Scalar-List-Util (http://search.cpan.org/~pevans/Scalar-List-Utils-1.41/lib/List/Util.pm), который успешно собрался, но установка не проходит:

Код: Выделить всё

$ sudo dpkg -i libscalar-list-utils-perl_1.41-1_amd64.deb
dpkg: warning: downgrading libscalar-list-utils-perl from 1:1.25-1 to 1.41-1
(Reading database ... 104022 files and directories currently installed.)
Preparing to replace libscalar-list-utils-perl 1:1.25-1 (using libscalar-list-utils-perl_1.41-1_amd64.deb) ...
Unpacking replacement libscalar-list-utils-perl ...
dpkg: dependency problems prevent configuration of libscalar-list-utils-perl:
 perl-base (5.14.2-21+deb7u2) breaks libscalar-list-utils-perl (<< 1:1.23) and is installed.
  Version of libscalar-list-utils-perl to be configured is 1.41-1.

dpkg: error processing libscalar-list-utils-perl (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db ...
Errors were encountered while processing:
 libscalar-list-utils-perl


Хотя свежий взгляд на ошибку наводит на мысль поиграться с версией пакета libscalar-list-utils-perl.
Спасибо сказали: