%Library.DynamicAbstractObject
abstract dynamic class %Library.DynamicAbstractObject extends %Library.AbstractSet
For information on the API provided by this superclass, see Using Dynamic Entities.
Dynamic Entity base class.Method Inventory
- %Clear()
- %FromJSON()
- %FromJSONFile()
- %FromObject()
- %FromObjectMulti()
- %FromObjectSwizzle()
- %FromOref()
- %GetDocumentCollection()
- %GetDocumentID()
- %GetDocumentVersion()
- %GetIterator()
- %GetSerial()
- %GetSwizzleObject()
- %GetTypeOf()
- %OnClose()
- %SetDocumentMetadata()
- %SetSerial()
- %Size()
- %ToJSON()
- _isLabeled()
- addList()
- clear()
- contains()
- containsAll()
- get()
- getDocumentCollection()
- getDocumentId()
- getDocumentVersion()
- iterator()
- put()
- putAll()
- putAllIfAbsent()
- putIfAbsent()
- remove()
- removeAll()
- removeIf()
- rename()
- replace()
- replaceAll()
- size()
- toJson()
- toString()
Methods
str The input can be from a number of sources
(1) A string value containing the source.
(2) A stream object to read the source from.
Returns An object of type %DynamicAbstractObject containing the parsed JSON.
NOTE: RFC 7159 specifies that the default encoding for JSON values uses UTF-8. This implies that for streams not containing 16-bit Unicode it may be necessary to explicitly convert individual character values via a call to $ZCONVERT (e.g. $zcvt(value,"I","UTF8") ) or entire streams by setting the TranslateTable attribute of the stream to "UTF8".
set filename = "c:/iscsrc/json/greg4.json" set stream = ##class(%Stream.FileCharacter).%New() set sc = stream.LinkToFile(filename) if ('sc) { w "Error on linking file "_filename,! q } try { set obj = ##class(%DynamicAbstractObject).%FromJSON(stream) } catch ex { w "Error. Unable to parse file "_filename,! w "Error type "_ex.Name,! w "Error code "_ex.Code,! w "Error location "_ex.Location,! set obj = "" } q obj
set src = "{""name"" : ""greg"", ""weight"" : 220 }" set obj = ##class(%DynamicAbstractObject).%FromJSON(src)
An alternative in the catch block, to see formatted exception information, is to do $SYSTEM.OBJ.DisplayError(%objlasterror).
filename A file URI where the JSON source can be read. By default, the file must be encoded as UTF8.
TranslateTable An optional parameter specifying the character encoding used in the JSON source file. If the parameter is missing, the file will use the "UTF8" encoding. See Translation Tables for other available Translation Tables.
Returns An object of type %DynamicAbstractObject containing the parsed JSON.
request object
Name | Description |
---|---|
source | Oref of the object to be cast as a DynamicAbstractObject. |
returnValue | An oref referencing the DynamicAbstractObject. |
set person = ##class(Sample.Person).%OpenId(50) set object = ##class(%DynamicObject).%FromOref(person)
Performs an iteration over all the values in a %DynamicAbstractObject subclass. Adding or removing an element of the %DynamicAbstractObject subclass will cause further calls on the %GetNext(.key,.value,.type) method to have undefined behavior.
In the example below, we will output all values contained in a %DynamicArray or a %DynamicObject.
set iter = AbstractObject.%GetIterator() while iter.%GetNext(.key, .value, .type ) { write "key = "_key_", value = "_value_", type = "_type,! }
Returns One of the following strings are returned.
"null" - JSON null
"boolean" - Either "true" or "false"
"number" - Any numeric value
"oref" - An %ObjectHandle (an ObjectScript oref)
"object" - A nested object
"array" - A nested array
"string" - Normal text string
"unassigned" - The value is unassigned
Returns An integer showing the size of the array or object. In the case of an array, the size includes unassigned entries within the array. In the case of an object, the size only includes elements that have assigned values.
outstrm is optional. There are a number of possibilities:
(1) Parameter outstrm is not defined and the method is called via
'DO'. In this case the JSON string is written to the current output device.
(2) Parameter outstrm is not defined and the method is called as an
expression. In this case the JSON string becomes the value of the expression.
(3) Parameter outstrm is defined. If it is %Stream object then the
JSON string will be written to the stream. If outstrm is
present but not an object then it is presumed to be a fully qualified
file specification. In that case, a %Stream.FileCharacter
stream is created, linked to that file
and the JSON string is written to that stream. On completion, this
stream is saved. The full path to the file must be defined. If
outstrm is an object but is not
an instance of %Stream.Object then an exception will be thrown.
NOTE: RFC 7159 specifies that the default encoding for JSON values uses UTF-8. When writing a stream containing 8-bit characters this implies that it may be necessary to explicitly convert individual values via a call to $ZCONVERT (e.g. $zcvt(value,"O","UTF8") ) or entire streams by setting the TranslateTable attribute of the stream to "UTF8"
set obj = {"title" : "MR" , "lastname" : "JONES"} set obj.firstname = "JIMMY" do obj.%ToJSON() {"title":"MR","lastname":"JONES","firstname":"JIMMY"} set source = obj.%ToJSON() write source {"title":"MR","lastname":"JONES","firstname":"JIMMY"}
parameters:
- key: key to put into the set
- value: value to put into the set
- type: type of the value, refer to %GetTypeOf() for a list of supported types
returns:
- oref referencing the modified DAO, this may be different from the current oref
throws:
- exception
put all {keys[n], values[n]} elements where 0≤n≤ size(keys) into the DAO
parameters:
- keys: array of keys to put into the DAO
- values: array of values to put into the DAO
returns:
- oref referencing the modified DAO
throws:
- exception
put all {keys[n], values[n]} elements where 0≤n≤ size(keys) and keys[n] is not already associated with a value in the set.
parameters:
- keys: array of keys to be put into the set
- values: array of values to be put into the set
returns:
- oref referencing the modified set
throws:
- exception
put the {key, value} element into the set. If contains(key) is false or get(key) is null then put(key,value)
parameters:
- key: key to put into the set
- value: value to put into the set
- oref referencing the modified set
throws:
- exception
remove the element identified by key from the set
parameters:
- key: key of element to be removed from the set
returns:
- the removed element or null if that element doesn't exist
throws:
- exception
remove all elements identified by keys[n] where 0≤n≤ size(keys) from the set
parameters:
- keys: array of keys to be removed from the set
returns:
- array of removed elements (null element if key doesn't exist)
throws:
- exception
parameters:
- expression: elements matching expression are to be removed
returns:
- array of removed elements (null element if key doesn't exist)
throws:
- exception
parameters:
- currentkey - current key of the element to be renamed
- newkey - new key to assign to the element
- the current key if the element exists, null otherwise
throws:
- exception
parameters:
- key - key of the element to be replaced
- value - new value of the element
- return the previous value of the element
throws:
- exception
parameters:
- keys: array of keys of the elements to be replaced
- values: array of values of the elements
returns:
- array of previous element values
throws:
- exception
Inherited Members
Inherited Methods
- %ClassIsLatestVersion()
- %ClassName()
- %DispatchClassMethod()
- %DispatchGetModified()
- %DispatchGetProperty()
- %DispatchMethod()
- %DispatchSetModified()
- %DispatchSetMultidimProperty()
- %DispatchSetProperty()
- %Extends()
- %GetParameter()
- %IsA()
- %New()
- %OriginalNamespace()
- %PackageName()
- %SetModified()
- add()
- addAll()
- apply()
- toDao()