#!/usr/bin/perl use strict; use IO::Socket::SSL; #qw(debug3); use JSON::SL; print "JSON Stream parser test\r\n"; my $p = JSON::SL->new; #Look for everything past the first JSON pointer $p->set_jsonpointer(["/^"]); # simple client my $cl = IO::Socket::SSL->new( PeerAddr => 'example.com', PeerService => 'https', PeerPort => 443, Proto => 'tcp', Reuse => 1 ); die "no connection" unless $cl -> connected(); print $cl "GET /stream/report?token=IAMAFAKETOKEN HTTP/1.0\r\n\r\n"; print <$cl>; local $/ = \5; #read only 5 bytes at a time while (my $line = <$cl>) { $p->feed($line); #parse what you can fetch anything that completed the parse and matches the JSON Pointer while (my $obj = $p->fetch) { print "$obj->{Value}{sequenceNumber}: $obj->{Value}{senderCallsign}\n"; #Inserted for testing #do filtering and database stuff here } } close $cl; #### #!/usr/bin/perl use strict; use warnings; use JSON::SL; my $p = JSON::SL->new; #look for everthing past the first level (i.e. everything in the array) $p->set_jsonpointer(["/^"]); local $/ = \5; #read only 5 bytes at a time while (my $buf = ) { $p->feed($buf); #parse what you can #fetch anything that completed the parse and matches the JSON Pointer while (my $obj = $p->fetch) { print "$obj->{Value}{sequenceNumber}: $obj->{Value}{senderCallsign}\n"; } } __DATA__ [ {"sequenceNumber":1401615035,"frequency":7076402,"mode":"JT65","sNR":-1,"flowStartSeconds":1492192912,"senderCallsign":"DJ0FX","senderLocator":"JN67KT","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"}, {"sequenceNumber":1401615039,"frequency":7077903,"mode":"JT65","sNR":-11,"flowStartSeconds":1492192973,"senderCallsign":"R7NO","senderLocator":"KN98","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"}, {"sequenceNumber":1401615040,"frequency":7076811,"mode":"JT65","sNR":-11,"flowStartSeconds":1492193032,"senderCallsign":"F6AVP","senderLocator":"JN28UX","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"} ] #### {"sequenceNumber":1401615035,"frequency":7076402,"mode":"JT65","sNR":-1,"flowStartSeconds":1492192912,"senderCallsign":"DJ0FX","senderLocator":"JN67KT","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"} {"sequenceNumber":1401615036,"frequency":7076996,"mode":"JT65","sNR":-6,"flowStartSeconds":1492192912,"senderCallsign":"RU6MO","senderLocator":"KN97KF","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"} {"sequenceNumber":1401615037,"frequency":7077360,"mode":"JT65","sNR":-5,"flowStartSeconds":1492192913,"senderCallsign":"RV3QD","senderLocator":"KO91NQ","receiverCallsign":"OZ7IO","receiverLocator":"JO65gq","receiverDecoderSoftware":"WSJT-X v1.7.0 r7405"}