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");
>    }
> }
>
>

Reply via email to