开发环境:VFP SP2 7423
祺佑三层开发框架
框架中有个QiyuJsonReady的类,利用它可以轻松把JSON转换为表。使用非常简单。
*-- 将JSON串转换为临时表的JSON类
*-- 支持JSON对象,JSON数组转换
*-- 支持多层路径 比如:对象\对象\数组
*-- 缓冲表模式(0 自动 1 新增 2 编辑 3 删除)
*-- 可与DAL_CA类完美配合
*-- 返回值:-1 出错,>=0 转化的记录数
1 JSON对象
TEXT TOcResultNOSHOW
{"id":1,"name":"ff1111","age":1}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TOoReader.cursorstructNOSHOW TEXTMERGE
idi,namec(50),age numeric(4)
ENDTEXT
oReader.Alias="test" &&生成的临时表名
oReader.keylist="id"&&主键
*--第二个参数:缓冲表识别模式(0自动 1新增 2编辑3删除)
*--第三个参数:如果键值是数组是否转换成JSON字符串
*--返回值:转换的记录行数|-1(出错)
IfoReader.parsecursor(cResult,0,.F.)
?oReader.msg
Else
Browse
Endif
2 JSON数组
TEXT TOcResultNOSHOW
[{"id":1,"name":"ff","age":1},{"id":2,"name":"ff","age":1}]
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TOoReader.cursorstructNOSHOW TEXTMERGE
idi,namec(50),age numeric(4)
ENDTEXT
oReader.Alias="test"
oReader.keylist="id"
IfoReader.parsecursor(cResult,0,.F.)
?oReader.msg
Else
Browse
Endif
3对像\数组一层的结构
TEXT TOcResultNOSHOW
{"rows":[{"id":1,"name":"ff","age":1}]}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TOoReader.cursorstructNOSHOW TEXTMERGE
idi,namec(50),age numeric(4)
ENDTEXT
oReader.Alias="test"
oReader.keylist="id"
oReader.root="rows" &&需要转换表的键的位置
IfoReader.parsecursor(cResult,0,.F.)
?oReader.msg
Else
Browse
Endif
4对像\对象\数组 多层的结构
TEXT TOcResultNOSHOW
{"mydata":{"rows":[{"id":1,"name":"ff","age":1}]}}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")&&JSONÐòÁÐÀà
TEXT TOoReader.cursorstructNOSHOW TEXTMERGE
idi,namec(50),age numeric(4)
ENDTEXT
oReader.Alias="test"
oReader.keylist="id"
oReader.root="mydata\rows" &&层级用\来表示
IfoReader.parsecursor(cResult,0,.F.)
?oReader.msg
Else
Browse
Endif
5值为数据或对象的结构
TEXT TOcResultNOSHOW
{"mydata":{"name":"test"},"rows":[{"id":1,"name":"ff","age":1}]},}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")TEXT TOoReader.cursorstructNOSHOW TEXTMERGE
mydata C(20),rowsc(240)
ENDTEXT
oReader.Alias="test"
*--第三个参数表单转换JSON对象或数组为JSON字符串
IfoReader.parsecursor(cResult,0,.T.)
?oReader.msg
Else
Browse
Endif
缓冲表识别规则:
当设为0自动时:无主键或主键值等于(NULLOR空串)识别为新增
有主键值,识别为修改
有名为qystatus的键,值为del,识别为删除
设为1新增模式:无论有无主键,都识别为新增
设为2修改模式:有主键,都识别为修改
设为3删除模式:有主键,都识别为删除
另外这个类可以与祺佑三层开发框架的DAL_CA类完美配合,实现一键保存到SQL SERVER,以后再介绍。
领取专属 10元无门槛券
私享最新 技术干货