Here's a sample code to display JSON or dynamic object.
It shows how to iterate over object, get property values and their paths.
Class JSON.Test
{
/// do ##class(JSON.Test).Test()
ClassMethod Test()
{
set json = "{""a"":1,""b"":2,""c"":{""c1"":3,""c2"":4}, ""d"": [5, {""e_e"":6}, 7]}"
set obj = {}.%FromJSON(json)
do ..Iterate(obj)
}
ClassMethod Iterate(obj As %DynamicAbstractObject, level = 0, path = "obj")
{
set indent = $j("", level * 4)
#dim iterator As %Iterator.Array
set iterator = obj.%GetIterator()
while iterator.%GetNext(.key, .value) {
set type = obj.%GetTypeOf(key)
write indent, "Key: ", key, !
write indent, "Type: ", type, !
if $classname(obj) = "%Library.DynamicArray" {
set newPath = path _ ".%GetAt(" _ key _ ")"
} else {
if $zname(key, 6) = 1 {
set newPath = path _ "." _ key
} else {
set newPath = path _ ".""" _ key _ """"
}
}
write indent, "Path: ", newPath, !
if $isObject(value) {
write indent, "Value: ", !
do ..Iterate(value, level + 1, newPath)
} else {
write indent, "Value: ", value, !
}
write !
}
}
}
Output from running Test method:
Key: a
Type: number
Path: obj.a
Value: 1
Key: b
Type: number
Path: obj.b
Value: 2
Key: c
Type: object
Path: obj.c
Value:
Key: c1
Type: number
Path: obj.c.c1
Value: 3
Key: c2
Type: number
Path: obj.c.c2
Value: 4
Key: d
Type: array
Path: obj.d
Value:
Key: 0
Type: number
Path: obj.d.%GetAt(0)
Value: 5
Key: 1
Type: object
Path: obj.d.%GetAt(1)
Value:
Key: e_e
Type: number
Path: obj.d.%GetAt(1)."e_e"
Value: 6
Key: 2
Type: number
Path: obj.d.%GetAt(2)
Value: 7
Top comments (0)