From: <de...@de...> - 2015-07-10 00:07:34
|
Author: PeterThoeny Date: 2015-07-10 00:05:57 +0000 (Fri, 10 Jul 2015) New Revision: 29400 Trac url: http://develop.twiki.org/trac/changeset/29400 Modified: twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/SetGetPlugin.txt twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/VarGET.txt Log: Item7675: GET with support for JSON path using [*] wildcard array index - updating docs Modified: twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/SetGetPlugin.txt =================================================================== --- twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/SetGetPlugin.txt 2015-07-10 00:05:51 UTC (rev 29399) +++ twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/SetGetPlugin.txt 2015-07-10 00:05:57 UTC (rev 29400) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1434584792" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1436486371" format="1.1" version="$Rev$"}% ---+!! !SetGetPlugin <!-- Contributions to this plugin are appreciated. Please update the plugin page at @@ -87,17 +87,18 @@ * JSON path fragment for a hash object is =.hashName=, such as: =.File= * supported characters for hash object name: alphanumeric, dash, underscore and dollar sign * JSON path fragment for an array object is =[n]=, such as: =[1]= - * supported characters for array index: non-negative integers + * supported characters for array index: non-negative integers =[0]...[9999]= and asterisk =[*]= + * use an =[*]= asterisk wildcard to indicate all array items (only one wildcard can be used in a JSON path) GET returns the JSON object or an object within it. The format depends on the type of object: * hash object: ={"key1":"value1","key2":"value2"}= - hash with key/value pairs; space trimmed; nondeterministic sequence; the value can be another JSON object * array object: =["va1","val2","val3"]= - array with values; space trimmed; the value can be another JSON object - * string object: =String= - text string, without enclosing double quotes + * string object: =String= - text string, __without enclosing double quotes__ ----+++ JSON Example +---+++ JSON Examples -Example to set, modify and get a JSON object: +__Example to set, modify and get a JSON object:__ * =%<nop>SET{ menu = { "File": { "New": [ "new", "F" ], "Open": [ "open", "F" ] }, "Edit": { "Copy": [ "cpy", "F" ], "Paste": [ "pst", "F" ] } } }%= - set a JSON object * =%<nop>GET{ menu }%= - get the JSON object, returns: ={"File":{"New":["new","F"],"Open":["open","F"]},"Edit":{"Copy":["cpy","F"],"Paste":["pst","F"]}}= @@ -107,8 +108,17 @@ * =%<nop>SET{ menu.Edit.Cut = [ "cut", "T" ] }%= - add to a JSON object * =%<nop>GET{ menu }%= - get the JSON object, returns: ={"File":{"New":["new","F"],"Open":["open","T"]},"Edit":{"Copy":["cpy","F"],"Paste":["pst","F"],"Cut":["cut","T"]}}= +__Example to set and get a JSON array of hashes object, using JSON path with =[*]= wildcard:__ + + * =%<nop>SET{ projects = [ { "name": "Prj A", "key": "PrjA", "owner": { "name": "Aaron", "id": 1 } }, { "name": "Prj B", "key": "PrjB", "owner": { "name": "Boris", "id": 2 } }, { "name": "Prj C", "key": "PrjC", "owner": { "name": "Charlie", "id": 3 } } ] }<nop>%= - set a JSON array of hashes object + * =%<nop>GET{ projects[1] }<nop>%= - get the second array item of the JSON object using JSON path, returns: ={"owner":{"name":"Boris"},"name":"Prj B","key":"PrjB"}= + * =%<nop>GET{ projects[1].name }<nop>%= - get the project name of the second array item, returns: =Prj B= + * =%<nop>GET{ projects[*].name }<nop>%= - use wildcard to get all project names, returns: =["Prj A","Prj B","Prj C"]= + * =%<nop>GET{ projects[*].owner }<nop>%= - use wildcard to get all project owner objects, returns: =[{"name":"Aaron"},{"name":"Boris"},{"name":"Charlie"}]= + * =%<nop>GET{ projects[*].owner.name }<nop>%= - use wildcard to get all project owner names, returns: =["Aaron","Boris","Charlie"]= + #SetGetExamples ----++ Examples +---++ SET/GET Examples ---+++ Set several times @@ -312,8 +322,9 @@ | ==lib/TWiki/Plugins/%TOPIC%/Config.spec== | Configuration file | * Set the ownership of the extracted directories and files to the webserver user. - * Install dependencies: + * Plugin dependencies: * Install the CPAN:JSON module in case JSON objects are used. + * Install the CPAN:Clone module if JSON path with [*] wildcard array index is used. * Plugin __configuration and testing__: * Run the [[%SCRIPTURL{configure}%][configure]] script and enable the plugin in the __Plugins__ section. @@ -331,13 +342,14 @@ | Copyright: | © 2015 Alba Power Quality Solutions %BR% © 2015 Wave Systems Corp. %BR% © 2010-2015 TWiki:Main.PeterThoeny <br /> © 2010-2015 TWiki:TWiki.TWikiContributor | | License: | GPL ([[http://www.gnu.org/copyleft/gpl.html][GNU General Public License]]) | | Sponsor: | [[http://www.wave.com/][Wave Systems Corp.]] | -| Plugin Version: | 2015-06-17 | +| Plugin Version: | 2015-07-09 | %TWISTY{ mode="div" showlink="Show Change History %ICONURL{toggleopen}%" hidelink="Hide Change History %ICONURL{toggleclose}% " }% %TABLE{ tablewidth="100%" columnwidths="170," }% +| 2015-07-09: | TWikibug:Item7675: GET with support for JSON path using [*] wildcard array index | | 2015-06-17: | TWikibug:Item7639: Document CPAN:JSON dependency | | 2015-04-09: | TWikibug:Item7639: Use file locking for persistent store files to prevent corruption of store | | 2015-04-09: | TWikibug:Item7635: SETGETDUMP can now dump volatile variables | @@ -360,7 +372,7 @@ %ENDTWISTY% %TABLE{ tablewidth="100%" columnwidths="170," }% | TWiki Dependency: | $TWiki::Plugins::VERSION 1.1 | -| CPAN Dependencies: | CPAN:JSON - optional, required if JSON objects are used | +| CPAN Dependencies: | CPAN:JSON - optional, required if JSON objects are used; %BR% CPAN:Clone - optional, required if JSON path with [*] wildcard array index is used | | Other Dependencies: | none | | Perl Version: | 5.005 | | [[TWiki:Plugins/Benchmark][Benchmarks]]: | %SYSTEMWEB%.GoodStyle 100%, %SYSTEMWEB%.FormattedSearch 99%, %TOPIC% 99% | Modified: twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/VarGET.txt =================================================================== --- twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/VarGET.txt 2015-07-10 00:05:51 UTC (rev 29399) +++ twiki/branches/TWikiRelease06x00/SetGetPlugin/data/TWiki/VarGET.txt 2015-07-10 00:05:57 UTC (rev 29400) @@ -1,4 +1,4 @@ -%META:TOPICINFO{author="TWikiContributor" date="1428457881" format="1.1" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1436486367" format="1.1" version="$Rev$"}% %META:TOPICPARENT{name="TWikiVariables"}% #VarGET ---+++ GET{"name"} -- get a variable @@ -6,7 +6,7 @@ * Syntax: =%<nop>GET{ "name" default="..." }%= * Parameters: | *Parameter* | *Description* | *Default* | - | ="name"= | Name of variable. | (required) | + | ="name"= | Name of variable, such as =menu=. May optionally contain a JSON path, such as =menu.File.Open=. | (required) | | =format="..."= | Format with supported variables: %BB% =$name= for variable name %BB% =$value= for variable value %BB% =$isdefined= expanding to =1= or =0= depending if variable is defined or not %BB% =$isset= expanding to =1= or =0= depending if variable is logically true or false %BB% =$ispersistent= expanding to =1= or =0= depending if variable is persistent or not %BB% all %SYSTEMWEB%.FormatTokens such as =$dollar=, =$n=, =$percnt=. | ="$value"= | | =default="..."= | Text shown if variable is not defined, e.g. not found. This parameter overrides the format parameter. | =""= (empty string) | | =store="..."= | Specify a store name that holds the persistent variable. This assumes the variable was previously set with the same store name. | =""= | |