1、定义属性对象,并设置全局Json格式化
Property JsonObj;
Method %FromJSON(jsonstr As %String)
{
s ret=0
s i%JsonObj={}
q:jsonstr="" ret
try{
s i%JsonObj={}.%FromJSON(jsonstr)
}catch{s ret=-100}
q ret
}
2、根据Rowid查询单条数据,并格式化为Json,也可以称作用sql查询并将sql查询结果转为Json。
/// Description: 入参为表名和要查的rowid
ClassMethod TableToJson(SqlTableName, RowId)
{
s existIsListProperty = ##class(%Dictionary.CompiledProperty).%ExistsId("%SQL.StatementColumn||isList")
s retJson = {}
s sqlStr = "SELECT * FROM "_SqlTableName_" where %ID = '"_RowId_"'"
s sqlStatement = ##class(%SQL.Statement).%New()
s sqlStatus = sqlStatement.%Prepare(sqlStr)
s sqlResult = sqlStatement.%Execute()
s columns = sqlStatement.%Metadata.columns
s colSize = columns.Size
while (sqlResult.%Next()){
for i = 1 : 1 : colSize {
s colName = columns.GetAt(i).colName
s colData = sqlResult.%Get(colName)
if (existIsListProperty = 1)&&(columns.GetAt(i).isList = 1){
s colData = $lts(colData)
}
d retJson.%Set(colName, colData)
}
}
q retJson.%ToJSON()
}
3、加一层保险,数据经过验证未json化处理成json,
/// Description: 转Json对象,如果已经是对象则直接返回
ClassMethod Parse(pData)
{
q:$IsObject(pData) pData
if ($e(pData,1)="["){
s pObj=##class(%DynamicArray).%New()
}else{
s pObj=##class(%DynamicObject).%New()
}
s json=pObj.%FromJSON(pData)
q json
}
评论