Here is the JSMN_Get function that Ward wrote in post #12 written to allow both delimiter notation (dot, comma, pipe, whatever notation) and JSON notation.
; #FUNCTION# ===================================================================
; Name: Jsmn_Get
; Description: Retrieves a value from the scripting.dictionary key specified
;
; Parameter(s):
; $Object Scripting dictionary object
;
; $Key Key for the value you want to retrieve. Follows delimiter based or JSON based format depending on the notation parameter
;
; $Notation
; 0 - Delimiter based - Key1.Key2
; 1 - JSON format based ["key1"]["key2"]
;
; $Delim If notation = 0 Then this is the delimiter between keys
;
; Requirement(s): JSMN JSON library by Ward.
;
; Return Value(s):
; On Success Returns value from key
;
; On Failure Returns a blank string and an error value.
; @error
; 1 - key does not exist
; 2 - notation syntax error
; @Extended - Only used if notation = 0
; See StringSplit error codes
;
; Author(s): Ward (modified slightly by SantaRyan to add delimiter notation)
;===============================================================================
Func Jsmn_Get($Object, $Key, $Notation = 0, $Delim = ".")
If Not $Key Then Return $Object
If IsKeyword($Notation) Then $Notation = 0
Local $Index, $Match, $Ret
If $Notation = 0 Then
$Match = StringSplit($Key, $Delim, 1)
If IsArray($Match) Then
$Index = $Match[1]
$Key = ""
For $i = 2 To $Match[0]
$Key &= $Match[$i] & $Delim
Next
$Key = StringTrimRight($Key, 1)
Else
Return SetError(2, 0, "")
EndIf
ElseIf $Notation = 1 Then
$Match = StringRegExp($Key, "(^\[([^\]]+)\])", 3)
If IsArray($Match) Then
$Index = Jsmn_Decode($Match[1])
$Key = StringTrimLeft($Key, StringLen($Match[0]))
Else
Return SetError(2, 0, "")
EndIf
EndIf
If IsString($Index) And Jsmn_IsObject($Object) And Jsmn_ObjExists($Object, $Index) Then
$Ret = Jsmn_Get(Jsmn_ObjGet($Object, $Index), $Key, $Delim)
Return SetError(@error, 0, $Ret)
ElseIf IsNumber($Index) And IsArray($Object) And $Index >= 0 And $Index < UBound($Object) Then
$Ret = Jsmn_Get($Object[$Index], $Key, $Delim)
Return SetError(@error, 0, $Ret)
Else
Return SetError(1, 0, "")
EndIf
EndFunc ;==>Jsmn_Get