Parses a standardized JSON string into a new JSON Entity.

Syntax

Result = SRP_Json(Handle, "Parse", JsonString, ReportErrors = 0)

Returns

Returns "" if successful or an error message if not.

Parameters

ParameterDescription
Handle [OUT]Variable to receive new handle to a JSON Entity. Required.
JsonStringThe JSON to parse. Required.
ReportErrors0 to return only success/failure; 1 to return a list of parsing errors. Optional. Added in SRP Utilities 2.0.5

Remarks

The PARSE service parses a string containing standardized JSON and produces a single JSON Entity Handle. If the JSON cannot be parsed, then this service returns a generic error message indicating that the parsing failed. If it succeeds, then "" is returns. The new JSON Entity Handle is placed into the variable you pass into the Handle parameter. It is perfectly safe to set Handle to an unassigned variable, but you should check the return value to see if the parsing was successfully, like so:

Result = SRP_Json(ObjectHandle, "Parse", SampleJSON)
If Result NE "" then
   Msg(@Window, Result:@FM:@FM:@FM:"!")
end

The new JSON entity's type depends upon the nature of the JSON. Here is some sample code testing each entity's type after parsing some JSON:

If SRP_Json(ObjectHandle, "Parse", '{"id": "Open"}') EQ "" then
   Type = SRP_Json(ObjectHandle, "TYPE") ; // Type is "Object"
   SRP_Json(ObjectHandle, "RELEASE")
end

If SRP_Json(ObjectHandle, "Parse", '["1", "2", "3"]') EQ "" then
   Type = SRP_Json(ObjectHandle, "TYPE") ; // Type is "Array"
   SRP_Json(ObjectHandle, "RELEASE")
end

If SRP_Json(ObjectHandle, "Parse", '"Hello, World!"') EQ "" then
   Type = SRP_Json(ObjectHandle, "TYPE") ; // Type is "String"
   SRP_Json(ObjectHandle, "RELEASE")
end

If SRP_Json(ObjectHandle, "Parse", '1') EQ "" then
   Type = SRP_Json(ObjectHandle, "TYPE") ; // Type is "Number"
   SRP_Json(ObjectHandle, "RELEASE")
end

If SRP_Json(ObjectHandle, "Parse", 'false') EQ "" then
   Type = SRP_Json(ObjectHandle, "TYPE") ; // Type is "Boolean"
   SRP_Json(ObjectHandle, "RELEASE")
end

IMPORTANT: Any JSON entity created by this service must be deallocated from memory when no longer needed using the Release service. Forgetting to do this on occasion will not cause a fatal error since SRP Utilities will clean up all its memory when OpenInsight closes, but frequently failing to release entities causes memory to get used up, which can become a problem over long periods of time.

Reporting Errors

Normally, the parser is very forgiving. It will still parse even if there are minor errors. However, there might be times when you want to know all errors, even if the parser is able to succeed. In this case, set the ReportErrors parameter to 1 to enable this feature. When enabled, the service will return an @FM delimited list of parsing errors, or "" if there were no errors.

Example

// Test parsing an existing JSON string and then drilling down into specific values
SampleJSON  = '{"menu": {'
SampleJSON := '    "header": "SVG Viewer",'
SampleJSON := '    "items": ['
SampleJSON := '        {"id": "Open"},'
SampleJSON := '        {"id": "OpenNew", "label": "Open New"},'
SampleJSON := '        null,'
SampleJSON := '        {"id": "ZoomIn", "label": "Zoom In"},'
SampleJSON := '        {"id": "ZoomOut", "label": "Zoom Out"},'
SampleJSON := '        {"id": "OriginalView", "label": "Original View"},'
SampleJSON := '        null,'
SampleJSON := '        {"id": "Quality"},'
SampleJSON := '        {"id": "Pause"},'
SampleJSON := '        {"id": "Mute"},'
SampleJSON := '        null,'
SampleJSON := '        {"id": "Find", "label": "Find..."},'
SampleJSON := '        {"id": "FindAgain", "label": "Find Again"},'
SampleJSON := '        {"id": "Copy"},'
SampleJSON := '        {"id": "CopyAgain", "label": "Copy Again"},'
SampleJSON := '        {"id": "CopySVG", "label": "Copy SVG"},'
SampleJSON := '        {"id": "ViewSVG", "label": "View SVG"},'
SampleJSON := '        {"id": "ViewSource", "label": "View Source"},'
SampleJSON := '        {"id": "SaveAs", "label": "Save As"},'
SampleJSON := '        null,'
SampleJSON := '        {"id": "Help"},'
SampleJSON := '        {"id": "About", "label": "About Adobe CVG Viewer..."}'
SampleJSON := '    ],'
SampleJSON := '    "testbool": "true",'
SampleJSON := '    "testint": "1234567890",'
SampleJSON := '    "testreal": "1234567890.987654321"'
SampleJSON := '}}'

// Parse it
If SRP_Json(ObjectHandle, "Parse", SampleJSON) EQ "" then
   
   // Grab some values
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.items[1].id")
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.items[12].label")
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.items[3]")
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.testbool")
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.testint")
   TestValue = SRP_Json(ObjectHandle, "GetValue", "menu.testreal")
   
   // Release the object because we're all done
   SRP_Json(ObjectHandle, "Release")

end

See Also

NewRelease

  • No labels