Re: Help with POE::Filter::JSON

"David Davis" <[email protected]>
Newsgroups gmane.comp.lang.perl.poe
Message-ID <[email protected]>
Your works for me, if there is a \n at the end of the file.
Since you are stacking Line and JSON, you need a line feed at the end.

The POE::Filter::JSON author,

David Davis
☄ Software Engineer
http://xant.us/


On Mon, Oct 27, 2008 at 06:54, Votava, Craig M (Craig) <
[email protected]> wrote:

> Folks-
>
>
>
> I'm trying to learn how to use POE::Filter::JSON, but am having some
> problems (none of the input is being un-JSON-ified).
>
>
>
> Attached is my code so far.
>
>
>
> Any suggestions or pointers are much appreciated.
>
>
>
> Thanks
>
>
>
> -Craig
>
>
>
> Use this as the contents of the input file (or any json input):
> {"Text":["Hi there...","How are
> you?","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15",
> "16","17","18","19","20","21","22","23","24","24","26","27","28","29"]}
>
> Here is the script:
> use strict;
> use warnings;
>
> use Tk; # This MUST come before use POE...
> use POE;
> use POE::Wheel::FollowTail;
> use POE::Filter::Stackable;
> use POE::Filter::Line;
> use POE::Filter::JSON;
> use Data::Dumper;
>
> my $infile = shift || die "Missing Input File...";
>
> _displayData();
>
> my $sess = _processData($infile);
>
> # This should simply create a dummy postback on the tail session
> my $subref = $sess->postback('DontDie');
>
> print STDERR "STARTING to process data...\n";
> POE::Kernel->run;
> exit;
>
> sub _processData{
>    my $ifile=shift || die "Missing input file";
>    POE::Session->create(
>        inline_states=>{
>            _start=>sub {
>                my $filters;
>                print "Session ", $_[SESSION]->ID, " has started.\n";
>                $_[KERNEL]->alias_set("myClient");
>                my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
>                # Setup filters in filter stack...
>                $filters = POE::Filter::Stackable->new(
>                    Filters=>[
>                        POE::Filter::Line->new(),
>                        POE::Filter::JSON->new(
>                        json_any => {
>                            allow_nonref =>1,
>                        },
>                        ),
>                    ],
>                );
>                $_[HEAP]->{wheel}=POE::Wheel::FollowTail->new(
>                    Seek=>0,
>                    Filename=>$ifile,
>                    InputEvent=>'display',
>                    Filter=> $filters,
>                );
>            },
>            display => sub{
>                InputEvent=>$_[KERNEL]->post(Display=>data=>$_[ARG0]),
>            },
>            sendStop   => sub{
>                print "Stopping file input\n";
>                my $heap = $_[HEAP];
>                delete $heap->{wheel};
>            },
>        },
>    ),
> }
>
>
> sub _displayData{
>
>    my $hwid = shift;
>    my $text;
>
>    POE::Session->create( inline_states => {
>        _start => sub {
>                $_[KERNEL]->alias_set("Display");
>                my $kernel=$_[KERNEL];
>
>                my $top = $poe_main_window;
>
>                # Create Stop button...
>                $top->Button(-text=>"Stop", -command=>sub{
>                    &stop($kernel);
>                    $top->update;
>                } )->pack(-side=>'bottom');
>
>                # Create top level Tree...
>                $text = $top->Scrolled('Text',
>                    -scrollbars=>'osow')->
>                    pack(-fill=>'both', -side=>'left',
>                           -expand=>1);
>
>            },
>        data=>sub{
>            my $node=$_[ARG0] || return;
>            #my $txt = join("\n", @{$node->{Text}});
>            $text->insert('end', Dumper($node) . "\n");
>
>            $text->update;
>        },
>    });
> }
>
> sub stop{
>    my $ker = shift;
>    if ($ker){
> print STDERR "Sending sendStop to myClient\n";
>        $ker->call("myClient","sendStop");
>    }
> }
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.