转换json_VFP轻松把JSON转换为缓冲表

本文介绍了如何在VFP环境下使用QiyuJsonReader类将JSON数据转换为临时表,支持对象、数组及多层结构的转换,并提供缓冲表识别模式,可与DAL_CA类配合用于SQL SERVER数据操作。
摘要由CSDN通过智能技术生成

a6884a3ff5d2c58ff642f3d3c8c9865e.gif

开发环境:VFP SP2 7423

          祺佑三层开发框架

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

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

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

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

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

*-- 可与DAL_CA类完美配合

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

1 JSON对象

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数组

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 对像\数组 一层的结构

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 对像\对象\数组 多层的结构

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 值为数据或对象的结构

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,以后再介绍。

836bc174d549df7d3a3d0a36617387a8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值