source: repository/lib/Metabrik/String/Json.pm

METABRIK_REPOSITORY_1_30_0
Last change on this file was 954:6fa51436f298, checked in by GomoR <gomor@…>, 6 months ago
  • update: copyright notice to 2018
File size: 2.0 KB
Line 
1#
2# $Id$
3#
4# string::json Brik
5#
6package Metabrik::String::Json;
7use strict;
8use warnings;
9
10use base qw(Metabrik);
11
12sub brik_properties {
13   return {
14      revision => '$Revision$',
15      tags => [ qw(unstable encode decode) ],
16      author => 'GomoR <GomoR[at]metabrik.org>',
17      license => 'http://opensource.org/licenses/BSD-3-Clause',
18      commands => {
19         encode => [ qw($data_list|$data_hash) ],
20         decode => [ qw($data) ],
21         is_valid => [ qw($data) ],
22      },
23      require_modules => {
24         'JSON::XS' => [ ],
25      },
26   };
27}
28
29sub encode {
30   my $self = shift;
31   my ($data) = @_;
32
33   $self->brik_help_run_undef_arg('encode', $data) or return;
34   $self->brik_help_run_invalid_arg('encode', $data, 'ARRAY', 'HASH') or return;
35
36   $self->log->debug("encode: data[$data]");
37
38   my $encoded = '';
39   eval {
40      $encoded = JSON::XS::encode_json($data);
41   };
42   if ($@) {
43      chomp($@);
44      return $self->log->error("encode: unable to encode JSON: $@");
45   }
46
47   return $encoded;
48}
49
50sub decode {
51   my $self = shift;
52   my ($data) = @_;
53
54   $self->brik_help_run_undef_arg('decode', $data) or return;
55
56   $self->log->debug("decode: data[$data]");
57
58   my $decoded = '';
59   eval {
60      my $j = JSON::XS->new;
61      $j->relaxed(1);
62      $decoded = $j->decode($data);
63   };
64   if ($@) {
65      chomp($@);
66      return $self->log->error("decode: unable to decode JSON: $@");
67   }
68
69   return $decoded;
70}
71
72sub is_valid {
73   my $self = shift;
74   my ($data) = @_;
75
76   $self->brik_help_run_undef_arg('is_valid', $data) or return;
77
78   $self->log->debug("is_valid: data[$data]");
79
80   eval {
81      $self->decode($data);
82   };
83   if ($@) {
84      return 0;
85   }
86
87   return 1;
88}
89
901;
91
92__END__
93
94=head1 NAME
95
96Metabrik::String::Json - string::json Brik
97
98=head1 COPYRIGHT AND LICENSE
99
100Copyright (c) 2014-2018, Patrice E<lt>GomoRE<gt> Auffret
101
102You may distribute this module under the terms of The BSD 3-Clause License.
103See LICENSE file in the source distribution archive.
104
105=head1 AUTHOR
106
107Patrice E<lt>GomoRE<gt> Auffret
108
109=cut
Note: See TracBrowser for help on using the repository browser.