---
name: "Sisimai::Message::JSON"
section: "3pm"
platform: "linux"
package: "libsisimai-perl"
version: "4.24.1-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/Sisimai::Message::JSON"
---

# Sisimai::Message::JSON(3pm)

Convert bounce object (decoded JSON) to data structure.

## NAME

Sisimai::Message::JSON - Convert bounce object (decoded JSON) to data structure.

## SYNOPSIS

```
    use JSON;
    use Sisimai::Message;
    my $jsonparser = JSON->new;
    my $jsonobject = $jsonparser->decode($jsonstring);
    my $messageobj = Sisimai::Message->new('data' => $jsonobject, 'input' => 'json');
```

## DESCRIPTION

Sisimai::Message::JSON convert bounce object (decode JSON) to data structure. When the email given as a argument of "**new()**" method is not a decoded JSON, the method returns "undef".

## CLASS METHODS

### "new(Hash reference)"

`"new()"` is a constructor of Sisimai::Message

```
    my $jsonparser = JSON->new;
    my $jsonstring = '{"neko":2, "nyaan": "meow", ...}';
    my $jsonobject = $jsonparser->decode($jsonstring);
    my $messageobj = Sisimai::Message->new('data' => $jsonobject, 'input' => 'json');
```

If you have implemented a custom MTA module and use it, set the value of "load" in the argument of this method as an array reference like following code:

```
    my $messageobj = Sisimai::Message->new(
                        'data'  => $jsonobject,
                        'load'  => ['Your::Custom::MTA::Module']
                        'input' => 'json',
                  );
```

Beginning from v4.19.0, \`hook\` argument is available to callback user defined method like the following codes:

```
    my $callbackto = sub {
        my $argv = shift;
        my $data = { 'feedback-id' => '', 'account-id' => '' };
        my $mesg = $argv->{'message'} || {};
        if( exists $mesg->{'feedbackId'} ) {
            $data->{'feedback-id'} = $mesg->{'feedback-Id'};
        }
        if( exists $mesg->{'sendingAccountId'} ) {
            $data->{'account-id'} = $mesg->{'sendingAccountId'};
        }
        return $data;
    };
    my $messageobj = Sisimai::Message->new(
                        'data'  => $jsonobject,
                        'hook'  => $callbackto,
                        'input' => 'json' );
    print $message->catch->{'feedback-id'};    # 01010157e48fa03f-c7e948fe-...
```

## INSTANCE METHODS

### "(from)"

`"from()"` returns empty string

```
    print $message->from;   # ''
```

### "header()"

`"header()"` returns empty Hash

```
    print $message->header; # {}
```

### "ds()"

`"ds()"` returns an array reference which include contents of delivery status.

```
    for my $e ( @{ $message->ds } ) {
        print $e->{'status'};   # 5.1.1
        print $e->{'recipient'};# neko@example.jp
    }
```

### "rfc822()"

`"rfc822()"` returns a hash reference which include the header part of the original message.

```
    print $message->rfc822->{'from'};   # cat@example.com
    print $message->rfc822->{'to'};     # neko@example.jp
```

### "catch()"

`"catch()"` returns any data generated by user-defined method passed at the \`hook\` argument of **new()** constructor.

## AUTHOR

azumakuniyuki

## COPYRIGHT

Copyright (C) 2014-2018 azumakuniyuki, All rights reserved.

## LICENSE

This software is distributed under The BSD 2-Clause License.
