7.动态变量与JSON处理

一、对态变量(新版)

## 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值