• 7.动态变量与JSON处理


    一、对态变量(新版)

    ## 1.定义

    set dObj={} // %Library.DynamicObject 动态变量
    set dObj.Name="Lucy"
    set dObj=[] // %Library.DynamicArray  动态数组
    
    • 1
    • 2
    • 3

    2.赋值

        // 变量
        set obj.Name="Lijie"
        // 数组
        set list."0"={"a":"1"}
        set list."1"={"b":"2"}
        
        // 插入到末尾
        do  list.%Push(obj)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.反射操作

    操作说明
    %Get(key)获取值
    %Remove(key)删除
    %Remove(key)删除
    %Set(key, value, type)设置值

    示例

    set obj={}
    do obj.%Set("Code",1)
    do obj.%Delete("Code")
    
    • 1
    • 2
    • 3

    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,!
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.遍历List

        for i=0:1:list.%Size()-1 {
            write list.%Get(i).%ToJSON() 
        }
    
    • 1
    • 2
    • 3

    二、旧版动态变量

    %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")
    
    • 1
    • 2

    b.获取值

        s value=obj.GetAt(“Name”)
    
    • 1

    c.遍历属性

    set key=""
    For
    {
    		s key=obj.Next(key)
    		q:key=""
    		s value=obj.GetAt(key)
    	 }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2%ListOfDataTypes

    JSON数组是字符串时使用

    a.添加数据

        s obj=##class(%ListOfDataTypes).%New()
    	do obj.Insert("red")
    	do obj.Insert("green")
    
    • 1
    • 2
    • 3

    b.获取值

        s value=obj.GetAt(1)
    
    • 1

    c.遍历属性

    For  set i=1:1:obj.Size
    {
    	Write list.GetAt(i).Value,!
    }
    
    • 1
    • 2
    • 3
    • 4

    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
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    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")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、JSON处理

    1.String 转对象

        s array={}
    	s array={}.%FromJSON(jsonStr)
        // 旧版:
        s obj=##class(Nur.JSON).Decode(str)
        s value=obj.GetAt(“a”)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.对象转String

        set obj.PatName=patName
    	set obj.RegNo=regNo
        set str=obj.%ToJSON()
        // Cache 2016以前版本:
        set str=##class(Nur.JSON).Encode(obj)
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    一文搞定注意力机制(Attention)
    652.寻找重复的子树
    使用 JMeter 和 Docker 进行服务存根
    一些负载均衡算法
    【day10.01】使用select实现服务器并发
    生成验证码图片
    线代小课整理
    Mac下通过nvm管理node
    python自动化测试—Python自动化框架及工具
    【云原生 | Kubernetes 系列】---Prometheus监控Redis
  • 原文地址:https://blog.csdn.net/aa_qq110/article/details/126197641