json_parse Function
Syntax
Arguments
- jsonTxtCharacter
JSON formatted text.
- flagJavascriptSyntaxLogical
Default = .f.. If the JSON string contains Javascript function definitions, this parameter must be set to .t., otherwise json_parse() may fail to parse the JSON.
Returns
- resultPointer
Returns the JSON parsed as a dot variable.
Description
The json_parse function parses a string in JSON format and returns an Xbasic dot variable.
Discussion
JSON parse is one of the most important functions for dealing with JSON in Xbasic. The json_parse function parses a string in JSON format and returns an Xbasic dot variable. Keep in mind that Xbasic is case in-sensitive so if the JSON you are parsing has duplicate property names (with different cases), the resulting Xbasic dot variable will only have a single instance of the property.
? json_parse("{ foo : 1}") = foo = 1
Json_parse can handle this incorrectly formatted json, i.e. JSON spec requires names be quoted. The json_parse() function can take an optional second argument to indicate if the JSON being parsed is a Javascript object literal rather than a JSON string. For example, the json_parse() function can interpret Javascript Date() functions in a JSON string. This allows you to parse JSON strings generated by the json_generate() function, if the json_generate() function generated a JSON string that uses the Date() function.
dim p as p p.name = "Fred" p.sayHello = "{javascript}function() { alert('hello');}"
Now, generate a Javascript object literal. Pass in .t. as the second argument to vartojson() to indicate that we want an Javascript object literal and not a JSON string.
dim jsObject as c jsObject = vartojson(p,.t.)
Here is what the resulting string looks like:
{ name: 'Fred', sayHello: function() { alert('hello');} }
Now, in order to be able to parse this object literal back to Xbasic, we use the json_parse() function but we set the optional second argument to .t.
dim pj as p pj = json_parse(jsObject, .t.) ?pj.name = "Fred" ?pj.sayHello = "{javascript}function() { alert('hello');}"
p2 = json_parse("[{name:\"Fred Smith\", age: 23 },{name:\"John Jones\", age: 45}]") ?p2[1] = age = 23 name = "Fred Smith" ?p2[2] = age = 45 name = "John Jones"
The following example shows a round trip using json_parse() and json_generate() to show how date and time values are preserved.
dim p1 as p p1.name = "Karen" p1.dob = date() p1.time = now() ? json_generate(p1) { "name": "Karen", "dob": Date('2016/10/26'), "time": Date('2016/10/26T23:52:28:130') } dim jsonTxt as c jsonTxt = json_generate(p1) dim p2 as p p2 = json_parse(jsonTxt) ?p2 = dob = {10/26/2016} name = "Karen" time = 10/26/2016 11:52:28 13 pm
See Also