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