############################################################################### #json.pm #Last Change: 2009-01-21 #Copyright (c) 2009 Marc-Seabstian "Maluku" Lucksch #Version 0.1 #################### #This file is an addon to the Dotiac::DTL project. #http://search.cpan.org/perldoc?Dotiac::DTL # #json.pm is published under the terms of the MIT license, which basically #means "Do with it whatever you want". For more information, see the #license.txt file that should be enclosed with libsofu distributions. A copy of #the license is (at the time of writing) also available at #http://www.opensource.org/licenses/mit-license.php . ############################################################################### package Dotiac::DTL::Addon::json; use strict; use warnings; require JSON; #If it is not already loaded. require Dotiac::DTL::Filter; require Dotiac::DTL::Value; our $VERSION=0.1; our $json=JSON->new(); #Global options, allow as much as possible. $json->allow_nonref(1); $json->allow_blessed(1); $json->allow_unknown(1); my $oldjson; my $oldjson_ascii; my $oldjson_pretty; my $oldjson_ascii_pretty; sub import { $oldjson = *{Dotiac::DTL::Filter::json}; $oldjson_ascii = *{Dotiac::DTL::Filter::json_ascii}; $oldjson_pretty = *{Dotiac::DTL::Filter::json_pretty}; $oldjson_ascii_pretty = *{Dotiac::DTL::Filter::json_ascii_pretty}; *{Dotiac::DTL::Filter::json}=\&json; *{Dotiac::DTL::Filter::json_ascii}=\&json_ascii; *{Dotiac::DTL::Filter::json_pretty}=\&json_pretty; *{Dotiac::DTL::Filter::json_ascii_pretty}=\&json_ascii_pretty; } sub unimport { *{Dotiac::DTL::Filter::json} = $oldjson; *{Dotiac::DTL::Filter::json_ascii} = $oldjson_ascii; *{Dotiac::DTL::Filter::json_pretty} = $oldjson_pretty; *{Dotiac::DTL::Filter::json_ascii_pretty} = $oldjson_ascii_pretty; } sub json { my $value=shift; $Dotiac::DTL::Addon::json::json->pretty(0); $Dotiac::DTL::Addon::json::json->utf8(1); return $value->set($json->encode($value->content)); } sub json_ascii { my $value=shift; $Dotiac::DTL::Addon::json::json->pretty(0); $Dotiac::DTL::Addon::json::json->ascii(1); return $value->set($json->encode($value->content)); } sub json_pretty { my $value=shift; $Dotiac::DTL::Addon::json::json->pretty(1); $Dotiac::DTL::Addon::json::json->utf8(1); return $value->set($json->encode($value->content)); } sub json_ascii_pretty { my $value=shift; $Dotiac::DTL::Addon::json::json->pretty(1); $Dotiac::DTL::Addon::json::json->ascii(1); return $value->set($json->encode($value->content)); } 1; __END__ =head1 NAME Dotiac::DTL::Addon::json: Filters to generate JSON data =head1 SYNOPSIS Load from a Dotiac::DTL-template: {% load json %} Load in Perl file for all templates: use Dotiac::DTL::Addon::json; Then it can be used: {{ data|json|safe }} {{ data|json_ascii }} {{ data|json_pretty }} {{ data|json_pretty_ascii|safe }} =head1 INSTALLATION via CPAN: perl -MCPAN -e "install Dotiac::DTL::Addon::json" or get it from L, extract it and then run in the extracted folder: perl Makefile.PL make test make install =head1 DESCRIPTION This provides some filters to output any type of data =head2 Filters B {{ "Foo"|json }} {# "Foo" #} {{ "Foo"|json|escape }} {# "Foo" #} =head3 json Converts any value into JSON, even lists and dictionaries. Output will be in UTF-8. data=>{List=>[1,2,3],Value=>"Foo\x{34fc}"}; {# #} var Value={{ data|json|safe }} {# var Value={"List":[1,2,3],"Value":"FooÒô+"} #} =head3 json_ascii Like json, but the output will be in ascii. This is useful if the generated HTML page is not utf8. data=>{List=>[1,2,3],Value=>"Foo"}; {# #} var Value={{ data|json_ascii|safe }} {# var Value={"List":[1,2,3],"Value":"Foo\u34fc"} #} =head3 json_pretty Like json, but with pretty output. This is much larger and mostly not needed. data=>{List=>[1,2,3],Value=>"Foo"}; {# #} var Value={{ data|json_pretty|safe }} {# var Value={ "List" : [ 1, 2, 3 ], "Value" : "FooÒô+" } #} =head3 json_ascii_pretty Like json_ascii, but also with pretty output. This is much larger and mostly not needed. data=>{List=>[1,2,3],Value=>"Foo"}; {# #} var Value={{ data|json_ascii_pretty|safe }} {# var Value={ "List" : [ 1, 2, 3 ], "Value" : "Foo\u34fc" } #} =head1 BUGS Please report any bugs or feature requests to L =head1 SEE ALSO L, L, L, L =head1 AUTHOR Marc-Sebastian Lucksch perl@marc-s.de =cut