Skip to content

Commit

Permalink
add json_parse.pro for compatibility prior to v8.2
Browse files Browse the repository at this point in the history
  • Loading branch information
jdeast01 committed Feb 12, 2018
1 parent 3e3421f commit ed04843
Showing 1 changed file with 93 additions and 0 deletions.
93 changes: 93 additions & 0 deletions json_parse.pro
@@ -0,0 +1,93 @@
; $Id: //depot/InDevelopment/scrums/ENVI_Yukon/idl/idldir/lib/idl_base64.pro#3 $
;
; Copyright (c) 2012-2015, Exelis Visual Information Solutions, Inc. All
; rights reserved. Unauthorized reproduction is prohibited.
;
;----------------------------------------------------------------------------
;+
; :Description:
; The JSON_PARSE function takes a JSON string and converts it into
; an IDL variable.
;
; :Returns:
; If *String* begins with a curly brace "{", then the result is
; a HASH, containing the unordered name-value pairs from the JSON string.
; If *String* begins with a square bracket "[", then the result is
; a LIST, containing the ordered collection of values.
; If *String* is a scalar string that does not begin with "{" or "[",
; then it is assumed to be a file name. If the file exists, then the
; contents of the file are read and parsed.
;
; *Note*: When converting JSON strings into IDL variables,
; the following rules are used:
; "null" becomes !NULL.
; "false" becomes byte 0, "true" becomes byte 1.
; Integer values become IDL variables of type LONG64.
; Floating-point numbers become IDL variables of type DOUBLE.
; Strings will be converted to IDL strings, and all \ escaped characters
; will be converted back to normal characters.
; JSON arrays will become IDL LIST variables.
; JSON objects will become IDL HASH variables.
;
; *Note*: Since the HASH stores its name-value pairs in an arbitrary
; order, the HASH::Keys() method may return the name-value pairs
; in a different order compared to the original JSON string.
;
; :Params:
; String:
; *String* must be a valid JSON string containing either a
; JSON *object* of name-value pairs, or a JSON *array* of values.
;
; :Keywords:
; None
;
;
; :Author:
; CT, VIS, Jan 2012. Based on the IDLffJSON, written by Dawn Lenz.
;-
function JSON_Parse, String, DEBUG=debug, _EXTRA=extra

compile_opt idl2, hidden

if (~KEYWORD_SET(debug)) then begin
ON_ERROR, 2
; Catch errors from our method and fake the call stack.
CATCH, iErr
if (iErr ne 0) then begin
CATCH, /CANCEL
MESSAGE, !ERROR_STATE.msg
endif
endif

; Make sure the object definition is compiled, in case this
; will be included in save files.
IDLffJSON__Define

; See if our input is actually a file name.
if (ISA(String, 'STRING', /SCALAR)) then begin

char = STRMID(String, 0, 1)
if (char ne '"' && char ne '[' && char ne '{') then begin

if (FILE_TEST(String, /READ) && QUERY_ASCII(String, info)) then begin
data = STRARR(info.lines)
OPENR, lun, String, /GET_LUN
READF, lun, data
FREE_LUN, lun
obj = OBJ_NEW("IDLffJSON")
result = obj->Parse(STRJOIN(data), DEBUG=debug, _STRICT_EXTRA=extra)
OBJ_DESTROY, obj
return, result
endif

endif

endif


obj = OBJ_NEW("IDLffJSON")
result = obj->Parse(String, DEBUG=debug, _STRICT_EXTRA=extra)
OBJ_DESTROY, obj
return, result
end

0 comments on commit ed04843

Please sign in to comment.