前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VFP轻松把JSON转换为缓冲表

VFP轻松把JSON转换为缓冲表

作者头像
加菲猫的VFP
发布2021-08-16 15:02:09
7280
发布2021-08-16 15:02:09
举报
文章被收录于专栏:加菲猫的VFP

开发环境:VFP SP2 7423

祺佑三层开发框架

框架中有个QiyuJsonReady的类,利用它可以轻松把JSON转换为表。使用非常简单。

*-- 将JSON串转换为临时表的JSON类

*-- 支持JSON对象,JSON数组转换

*-- 支持多层路径 比如:对象\对象\数组

*-- 缓冲表模式(0 自动 1 新增 2 编辑 3 删除)

*-- 可与DAL_CA类完美配合

*-- 返回值:-1 出错,>=0 转化的记录数

1 JSON对象

代码语言:javascript
复制
TEXT TO cResult NOSHOW
{"id":1,"name":"ff1111","age":1}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
id i,name c(50),age numeric(4)
ENDTEXT
oReader.Alias="test"  &&生成的临时表名
oReader.keylist="id" &&主键
*--第二个参数:缓冲表识别模式(0 自动  1 新增  2 编辑 3 删除)
*--第三个参数:如果键值是数组是否转换成JSON字符串
*--返回值:转换的记录行数|-1(出错)
If oReader.parsecursor(cResult,0,.F.) <0
   ?oReader.msg
Else
   Browse
Endif

2 JSON数组

代码语言:javascript
复制
TEXT TO cResult NOSHOW
[{"id":1,"name":"ff","age":1},{"id":2,"name":"ff","age":1}]
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
id i,name c(50),age numeric(4)
ENDTEXT
oReader.Alias="test" 
oReader.keylist="id"
If oReader.parsecursor(cResult,0,.F.) <0
   ?oReader.msg
Else
   Browse
Endif

3 对像\数组 一层的结构

代码语言:javascript
复制
TEXT TO cResult NOSHOW
{"rows":[{"id":1,"name":"ff","age":1}]}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg")
TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
id i,name c(50),age numeric(4)
ENDTEXT
oReader.Alias="test" 
oReader.keylist="id" 
oReader.root="rows"  &&需要转换表的键的位置
If oReader.parsecursor(cResult,0,.F.) <0
   ?oReader.msg
Else
   Browse
Endif

4 对像\对象\数组 多层的结构

代码语言:javascript
复制
TEXT TO cResult NOSHOW
{"mydata":{"rows":[{"id":1,"name":"ff","age":1}]}}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg") &&JSONÐòÁÐÀà
TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
id i,name c(50),age numeric(4)
ENDTEXT
oReader.Alias="test" 
oReader.keylist="id" 
oReader.root="mydata\rows"  &&层级用\来表示
If oReader.parsecursor(cResult,0,.F.) <0
   ?oReader.msg
Else
   Browse
Endif

5 值为数据或对象的结构

代码语言:javascript
复制
TEXT TO cResult NOSHOW
{"mydata":{"name":"test"},"rows":[{"id":1,"name":"ff","age":1}]},}
ENDTEXT
oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg") TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
mydata C(20),rows c(240)
ENDTEXT
oReader.Alias="test" 
*--第三个参数表单转换JSON对象或数组为JSON字符串
If oReader.parsecursor(cResult,0,.T.) <0
   ?oReader.msg
Else
   Browse
Endif

缓冲表识别规则:

当设为0自动时:无主键或主键值等于(NULLOR空串)识别为新增

       有主键值,识别为修改

有名为qystatus的键,值为del,识别为删除

设为1新增模式:无论有无主键,都识别为新增

设为2修改模式:有主键,都识别为修改

设为3删除模式:有主键,都识别为删除

另外这个类可以与祺佑三层开发框架的DAL_CA类完美配合,实现一键保存到SQL SERVER,以后再介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 JSON对象
  • 2 JSON数组
  • 3 对像\数组 一层的结构
  • 4 对像\对象\数组 多层的结构
  • 5 值为数据或对象的结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档