• M组装JSON


    在web开发里面,JSON是一种常见数据。经常需要从数据库返回JOSN数据。一种方法就是拼串组装JSON,这种可读性不好,还要处理转义符。可以借助M动态对象得到JSON串。

    返回对象的JOSN串,这样就可以组装一个复杂的JSON对象串返回

    set mianObj =##class(%DynamicObject).%New()
    	//默认工作小组
        s mianObj.DefWGMachineDR=""
        //默认状态
        s mianObj.WorkStatus=""
        //文件服务地址
        s mianObj.FTPAddress=..GetFileService()
        
        //对象的数组属性
        s mianObj.SensitivityData=[]
        s Sequence="" f  s Sequence=$o(^dbo.BTSensitivityI("IndexSequence",Sequence)) q:Sequence=""  d
        .s RowID="" f  s RowID=$o(^dbo.BTSensitivityI("IndexSequence",Sequence,RowID)) q:RowID=""  d
        ..s Active=$lg($g(^dbo.BTSensitivityD(RowID)),6)
        ..i Active=0 q
        ..s oneObj =##class(%DynamicObject).%New()
        ..s oneObj.RowID=RowID
        ..s oneObj.Code=$lg($g(^dbo.BTSensitivityD(RowID)),2)
        ..s oneObj.CName=$lg($g(^dbo.BTSensitivityD(RowID)),3)
        ..s oneObj.Sequence=$lg($g(^dbo.BTSensitivityD(RowID)),6)
        ..s oneObj.Code=$lg($g(^dbo.BTSensitivityD(RowID)),2)
        ..d mianObj.SensitivityData.%Push(oneObj)
        
        set ChildObj =##class(%DynamicObject).%New()
        s ChildObj.ChildName="子对象属性"
        s mianObj.Child=ChildObj
        
        //返回JSON
      	q mianObj.%ToJSON()
    
    • 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
    • 27
    • 28

    返回JSON数组串

    //对象的数组属性
        s retArr=[]
        s Sequence="" f  s Sequence=$o(^dbo.BTSensitivityI("IndexSequence",Sequence)) q:Sequence=""  d
        .s RowID="" f  s RowID=$o(^dbo.BTSensitivityI("IndexSequence",Sequence,RowID)) q:RowID=""  d
        ..s Active=$lg($g(^dbo.BTSensitivityD(RowID)),6)
        ..i Active=0 q
        ..s oneObj =##class(%DynamicObject).%New()
        ..s oneObj.RowID=RowID
        ..s oneObj.Code=$lg($g(^dbo.BTSensitivityD(RowID)),2)
        ..s oneObj.CName=$lg($g(^dbo.BTSensitivityD(RowID)),3)
        ..s oneObj.Sequence=$lg($g(^dbo.BTSensitivityD(RowID)),6)
        ..s oneObj.Code=$lg($g(^dbo.BTSensitivityD(RowID)),2)
        ..d retArr.%Push(oneObj)
    
        
        //返回JSON
      	q retArr.%ToJSON()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    怎么把Query快速处理成JSON数组对象

    /// 调用Query得到JSON数组对象
    /// ClassName:类名
    /// FuncName:Query名字
    /// w ##Class(LIS.WS.DHCLISServiceBase).GetQueryJsonArr()
    ClassMethod GetQueryJsonArr(ClassName, FuncName, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
    {
    	s ClassName=$g(ClassName)
    	s FuncName=$g(FuncName)
    	s P0=$g(P0),P1=$g(P1),P2=$g(P2),P3=$g(P3),P4=$g(P4),P5=$g(P5),P6=$g(P6),P7=$g(P7),P8=$g(P8),P9=$g(P9),P10=$g(P10),P11=$g(P11),P12=$g(P12),P13=$g(P13),Sessions=$g(Sessions)
    	s rsetNew=##class(%XML.DataSet).%New()
    	s rsetNew.ClassName = ClassName
    	s rsetNew.QueryName = FuncName
    	s rsetNew.NeedSchema=1
    	s rsetNew.DiffGram=0
    	s sc=rsetNew.Execute(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
    	s colCount=rsetNew.GetColumnCount()
    	set retArr=[]
        While (rsetNew.Next()) 
        {
           s OneRow =##class(%DynamicObject).%New()
           f i=1:1:colCount
           {
              s colName=rsetNew.GetColumnName(i)
              s colValue=rsetNew.GetDataByName(colName)
              s CodeStr="(OneRow,colValue) s OneRow."_colName_"=colValue"
              x (CodeStr,.OneRow,colValue)
           }
           d retArr.%Push(OneRow)
        }
        q retArr
    }
    
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31

    得到表一行数据的JSON

    /// 得到一行数据的JSON对象
    /// w ##Class(LIS.WS.DHCLISServiceBase).GetTableRowJson("dbo.SYSUser","113").%ToJSON()
    /// TableName:表类名
    /// RowID:数据主键,和TableObj二传1
    /// TableObj:数据对象,和RowID二传1
    ClassMethod GetTableRowLogJson(TableName, RowID, TableObj)
    {
    	s TableName=$g(TableName)
    	s RowID=$g(RowID)
    	s TableObj=$g(TableObj)
    	s retArr=[]
    	s @"RetJsonObj =##class(%DynamicObject).%New()"
    	i $l(RowID) d
    	.//更新的这里不能用OpenId,用他取的数据是改了之后的对象
    	.//s @("Obj=##class("_TableName_").%OpenId("_RowID_")")
    	.s @("Obj=$g(^"_TableName_"D("_RowID_"))")
    	e  d
    	.s @("Obj")=TableObj
    	s rset = ##class(%ResultSet).%New()
    	d rset.Prepare("select COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='dbo' AND REPLACE(TABLE_NAME,'_','')='"_$REPLACE(TableName,"dbo.","")_"' Order by ORDINAL_POSITION")
    	s exeret=rset.Execute()
    	s colCount=rset.GetColumnCount()
    	s dealNum=0
    	s PropertyMap=""
    	s Index=0
        While(rset.Next())
        {
    	    s colField=rset.GetColumnName(1)
            s ColValue=rset.GetDataByName(colField)
            s Index=Index+1
            i $l(RowID) d
            .i Index=1 d
            ..s @("RetJsonObj."_ColValue_"="_RowID)
            .e  d
            ..s @("RetJsonObj."_ColValue_"=$lg(Obj,"_Index_")")
            e  d
            .s @("RetJsonObj."_ColValue_"=Obj."_ColValue)
        }
        d retArr.%Push(@"RetJsonObj")
        q retArr
    }
    
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    以上就是常用的组JSON操作

  • 相关阅读:
    猿创征文|python求解四位数 青少年编程电子学会python编程等级考试三级真题解析2021年03月
    etcd实现大规模服务治理应用实战
    MyCat安装
    Docker详解
    Apache APISIX 集成 Elasticsearch 实现实时日志监控
    IP地址查询
    大厂面试-好未来一面算法之求最长无重复子串长度
    交换机如何实现2.5G网络传输速率和网络变压器有关吗
    2023年:我成了半个外包
    语音信号处理的过程及其应用
  • 原文地址:https://blog.csdn.net/zhanglianzhu_91/article/details/126310713