一、对态变量(新版)
## 1.定义
set dObj={} // %Library.DynamicObject 动态变量
set dObj.Name="Lucy"
set dObj=[] // %Library.DynamicArray 动态数组
2.赋值
// 变量
set obj.Name="Lijie"
// 数组
set list."0"={"a":"1"}
set list."1"={"b":"2"}
// 插入到末尾
do list.%Push(obj)
3.反射操作
操作 | 说明 |
---|---|
%Get(key) | 获取值 |
%Remove(key) | 删除 |
%Remove(key) | 删除 |
%Set(key, value, type) | 设置值 |
示例
set obj={}
do obj.%Set("Code",1)
do obj.%Delete("Code")
4.遍历
s obj={}
s obj.Name="Lijie"
s obj.Sex="Male"
set iter = obj.%GetIterator()
while iter.%GetNext(.key , .value )
{
write "key = "_key_" , value = "_value,!
}
5.遍历List
for i=0:1:list.%Size()-1 {
write list.%Get(i).%ToJSON()
}
二、旧版动态变量
%ArrayOfDataTypes、%ListOfDataTypes应用于基本类型; %ArrayOfObjects、%ListOfObjects应用于对象。
其中List类类似数据,使用Insert、Count、GetAt方法操作;Array类类似Map,使用SetAt、Next、GetAt方法访问。
1.动态变量: %ArrayOfDataTypes
可用该对象表示只有一级的JSON,也可当Map用
a.设置
s obj=##class(%ArrayOfDataTypes).%New()
s obj.SetAt("value","Name")
b.获取值
s value=obj.GetAt(“Name”)
c.遍历属性
set key=""
For
{
s key=obj.Next(key)
q:key=""
s value=obj.GetAt(key)
}
2%ListOfDataTypes
JSON数组是字符串时使用
a.添加数据
s obj=##class(%ListOfDataTypes).%New()
do obj.Insert("red")
do obj.Insert("green")
b.获取值
s value=obj.GetAt(1)
c.遍历属性
For set i=1:1:obj.Size
{
Write list.GetAt(i).Value,!
}
3.%ListOfObjects
JSON数组使用
示例如下:
Class Sample.Test
{
Property Value As %String;
ClassMethod Test()
{
// w ##class(Sample.Test).Test()
set list=##class(%Library.ListOfObjects).%New()
set obj=##class(Sample.Test).%New()
set obj.Value="aa"
do list.Insert(obj)
set obj=##class(Sample.Test).%New()
set obj.Value="bb"
do list.Insert(obj)
set obj=##class(Sample.Test).%New()
set obj.Value="cc"
do list.Insert(obj)
for i=1:1:list.Size
{
w list.GetAt(i).Value,!
}
quit 0
}
}
4.%ArrayOfObjects
JSON中包含多层对象时使用
set arrayObject=##class(%ArrayOfObjects).%New()
set obj=##class(Sample.Test).%New()
s status= arrayObject.SetAt(obj,"first")
write arrayObject.Count(),!
wirte arrayObject.GetAt("first")
三、JSON处理
1.String 转对象
s array={}
s array={}.%FromJSON(jsonStr)
// 旧版:
s obj=##class(Nur.JSON).Decode(str)
s value=obj.GetAt(“a”)
2.对象转String
set obj.PatName=patName
set obj.RegNo=regNo
set str=obj.%ToJSON()
// Cache 2016以前版本:
set str=##class(Nur.JSON).Encode(obj)