The json vmod allows for JSON parsing. It can parse JSON strings, request body JSON,
and response body JSON.
To use this vmod, a JSON context must first be created using one of the parse
functions. This context is then used by all subsequent vmod_json function calls. Creating
a new context will clear any previously created context.
In addition, this vmod can be used in conjunction with other vmods, such as vmod_jwt and vmod_edgestash.
vcl 4.1;
import json;
sub vcl_deliver {
json.parse({"{
"baz": [
3.14159,
"pie",
true
]
}"});
if (json.is_valid()) {
set resp.http.result = json.get("baz[1]");
}
}
vcl 4.0;
import json;
import std;
sub vcl_recv
{
std.cache_req_body(100KB);
json.parse_req_body();
if (json.is_valid() && json.is_object() &&
json.get("authorization")) {
req.http.X-authorization = json.get("authorization");
} else {
return(synth(401));
}
}
VOID parse(STRING json)
Parse a JSON string and create a new JSON context. Any previous context is freed.
Arguments:
json accepts type STRINGType: Function
Returns: None
VOID parse_req_body()
Parse a request body and create a new JSON context. Can only be used in sub vcl_recv.
std.cache_req_body() must be called prior. Any previous context is freed.
Arguments: None
Type: Function
Returns: None
Restricted to: vcl_recv
VOID parse_resp_index()
Parse a response body and create a new JSON context. Must be used in conjunction with edgestash.index_json().
Can only be used in sub vcl_deliver. Any previous context is freed.
Arguments: None
Type: Function
Returns: None
Restricted to: vcl_deliver
BOOL contains(STRING element)
Traverse from the document root with a given path. For example,
myobject.value requires myobject to be in the root, and value to be a child.
You can’t search for arbitrary values without a full path.
This function is faster to call than get and does not require workspace allocations.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
STRING get(STRING search, STRING error = 0, BOOL json_string = 0)
Get the value for search in the current JSON context.
Examples:
myobject.value requires myobject to be in the root, and value to be a child.myarray[2] obtains the third entry in an array.Arguments:
search accepts type STRING
error accepts type STRING with a default value of 0 optional
json_string accepts type BOOL with a default value of 0 optional
Type: Function
Returns: String
INT length([STRING element])
Get the length of the JSON node described by element, or the root JSON node
if element is not specified. For objects, this function returns the number
of keys. For arrays, it returns the number of elements. For everything else, 0.
Arguments:
element accepts type STRINGType: Function
Returns: Int
BOOL is_valid()
Is this valid JSON?
Arguments: None
Type: Function
Returns: Bool
BOOL is_error()
Is this invalid JSON?
Arguments: None
Type: Function
Returns: Bool
BOOL is_object([STRING element])
Check whether or not the JSON node described by element is an object. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_array([STRING element])
Check whether or not the JSON node described by element is an array. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_string([STRING element])
Check whether or not the JSON node described by element is a string. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_number([STRING element])
Check whether or not the JSON node described by element is a number. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_true([STRING element])
Check whether or not the JSON node described by element is a true value. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_false([STRING element])
Check whether or not the JSON node described by element is a false value. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
BOOL is_null([STRING element])
Check whether or not the JSON node described by element is a null value. If
element is not specified, check the root JSON node.
Arguments:
element accepts type STRINGType: Function
Returns: Bool
STRING stringify(STRING value, BOOL quoted = 1)
Encode value into a JSON safe string
Arguments:
value accepts type STRING
quoted accepts type BOOL with a default value of 1 optional
Type: Function
Returns: String
VOID reset()
Reset the internal state.
Arguments: None
Type: Function
Returns: None
The json VMOD is available in Varnish Enterprise version 6.0.6r6 and later.