The miva_json_decode(...) function in Mivascript is very easy to use. Better yet, it's wonderfully useful.
The miva json encode function is not built into Mivascript, however there is a json_encode(...) function in the Miva Merchant API that let's you use it in your modules or in template Store Morph Technology (SMT) code. We'll take a quick look at both of these and how they can be used in Miva Merchant templates.
miva_json_decode(...)
Here is a block of basic json set up in SMT code. Using MvCAPTURE is the easiest way to put the JSON into a variable because there is no need to deal with any special formatting.
<mvt:capture variable="l.settings:scientists">
{
"scientists": [
{
"name":"Albert Einstein",
"ice_cream":"Vanilla",
"idea":"Theory of Relativity"
},
{
"name":"Ernest Rutherford",
"ice_cream":"Pistacio",
"idea":"Everything Edison Took Credit For"
},
{
"name":"Stephen Hawkins",
"ice_cream":"none",
"idea":"Hawking radiation"
}
]
}
</mvt:capture>
This JSON block is now stored in l.settings:scientists
- note that in a module you would use the MvCAPTURE tag.
Hint: Using l.settings
style variables in template coding (SMT) makes them super easy to display. &mvt:variable;
is faster and cleaner looking than using the <mvt:eval expr="l.some_variable" />
.
Make an array out of l.settings:scientists
by using the miva_json_decode(...)
function and display the data in a loop:
<mvt:assign name="l.json_convert_ok" value="miva_json_decode(l.settings:scientists,l.settings:json_array)" />
<mvt:if expr="l.json_convert_ok NE 1">
<p>JSON is invalid.</p>
<mvt:else>
<mvt:foreach iterator="scientist" array="json_array:scientists">
<p>
<b>Name:</b> &mvt:scientist:name;
<b>Favorite Ice Cream:</b> &mvt:scientist:ice_cream;
<b>Popular idea:</b> &mvt:scientist:idea;
</p>
</mvt:foreach>
</mvt:if>
The miva_json_decode(...)
function returns a 1 if the JSON is decoded successfully. It's generally good to check for things like this so the code above includes an mvt:if
conditional to make sure the data is OK.
The output of the code above is:
Name: Albert Einstein
Favorite Ice Cream: Vanilla
Idea: Theory of Relativity
Name: Ernest Rutherford
Favorite Ice Cream: Pistacio
Idea: Everything Edison Took Credit For
Name: Stephen Hawkins
Favorite Ice Cream: none
Idea: Hawking radiation