| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 489 人关注过本帖
标题:一个 jsondata 挑战去解析
只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:489
专家分:630
注 册:2013-5-14
结帖率:2.99%
收藏
 问题点数:20 回复次数:9 
一个 jsondata 挑战去解析
最近得到一个回报文,发现VFP原生确很难解析。。。。
jsondata.txt (101.91 KB)


搜索更多相关主题的帖子: 解析 挑战 报文 VFP 
4 天前 15:47
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:829
专家分:1256
注 册:2021-10-13
收藏
得分:0 
瓜哥的foxjson可以解析你的这个数据,我自己写的可能有bug,被你这段文本干死机了
4 天前 20:27
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:322
专家分:750
注 册:2021-11-24
收藏
得分:0 
很普通的json字符串啊,不知道你解析哪个节点 有问题
这个json字符串是 金蝶 返回来的? 看到formid,怎么觉得那么眼熟

金蝶一张单据,会关联十几个子表,才会得到完整的数据

[此贴子已经被作者于2024-12-30 21:11编辑过]

4 天前 21:06
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:489
专家分:630
注 册:2013-5-14
收藏
得分:0 
这段解析反序化时,现有的VFP原生基本都失效,可见VFP原生json解析反序化时是存在狭义性的!有时间搞个cOM对象json给VFP使用就好了。。。。
4 天前 22:48
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9853
专家分:27248
注 册:2012-2-5
收藏
得分:0 
试试VFP的ALINES()

坚守VFP最后的阵地
3 天前 01:06
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:489
专家分:630
注 册:2013-5-14
收藏
得分:0 
。。。。。。。。。

[此贴子已经被作者于2024-12-31 09:33编辑过]

3 天前 09:31
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:489
专家分:630
注 册:2013-5-14
收藏
得分:0 
以下是引用easyppt在2024-12-30 21:06:28的发言:

很普通的json字符串啊,不知道你解析哪个节点 有问题
这个json字符串是 金蝶 返回来的? 看到formid,怎么觉得那么眼熟

金蝶一张单据,会关联十几个子表,才会得到完整的数据


上贴乱了哈。
没有想的那么复杂,玩VFP喜欢把很多问题想得太复杂,这是原生C扩展出VFP所带来的逻辑,现在都不这么玩了,发给你参考一下。。。。。?


?"2.单据查询 - 销售订单(SAL_SaleOrder): SAL_SaleOrder 待装入实体数据->"
m.lcErrorMsg      = ""                    &&@地址回参
m.lcFormId          = "SAL_SaleOrder"        &&销售订单(SAL_SaleOrder)
m.lcOperateStyle = "ExecuteBillQuery"     &&单据查询  区分大小写

*-- 建表 T_SAL_OUTSTOCK
Create Cursor SAL_SaleOrder( FDate                    C(26);            &&    日期
                            ,FBillNo                C(60);            &&    单据编号
                            ,FCustId_FNumber        C(60);            &&    客户
                            ,FSalerId_FName            C(200);            &&    客户名称
                            ,FQty                    N(13,10);        &&    数量            
                            ,FPrice                    N(13,10);        &&    单价
                            ,FAmount                N(13,10);        &&    金额
                            ,FSettleCurrId_FName    C(60);            &&    结算币别名称
                            ,FMaterialId_FNumber    C(60);            &&  物料编码   
                           )
*--获取对应表字段序列
Local lcFieNoLsts    ;
    , lcFieNo        ;
    , lnCount     
For m.lnCount = 1 To Fcount( "SAL_SaleOrder" )
    m.lcFieNo = Field( m.lnCount )
    m.lcFieNo = Strtran( m.lcFieNo , "_" , "." )
    m.lcFieNoLsts = Iif( Empty( m.lcFieNoLsts ) , "" , m.lcFieNoLsts + "," ) + m.lcFieNo
Endfor

*--构造JsonString 说明:
*    FormId            String    必录            SAL_OUTSTOCK    业务对象表单Id(必录)
*    FieldKeys        String    必录            需查询的字段key集合,字符串类型,格式:"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如:FEntryKey_FEntryId)
*    FilterString    Array    非必录            []    过滤条件,数组类型,如:[{"Left":"(","FieldName":"Field1","Compare":"67","Value":"111","Right":")","Logic":"0"},{"Left":"(","FieldName":"Field2","Compare":"67","Value":"222","Right":")","Logic":"0"}]
*    OrderString        String    非必录            排序字段,字符串类型(非必录)
*    TopRowCount        Integer    非必录    0        返回总行数,整型(非必录)
*    StartRow        Integer    非必录    0        开始行索引,整型(非必录)
*    Limit            Integer    非必录    2000    最大行数,整型,不能超过10000(非必录)
*    SubSystemId        String    非必录            表单所在的子系统内码,字符串类型(非必录)
Text To m.lcJsonData Textmerge Noshow Pretext 1+2+4+8
        {
            FieldKeys:"<<m.lcFieNoLsts>>",
            FilterString:"FDate >= '2024-12-30'",
            FormId:"<<m.lcFormId>>",
            Limit:100000,
            OrderString:"FBillNo",
            StartRow:0,
            SubSystemId:"",
            TopRowCount:0
        }
Endtext

*-- SendBody 是通用方法
m.lcResult = oKDApi.SendBody( m.lcOperateStyle ,m.lcFormId , m.lcJsonData , @lcErrorMsg )

If !Empty( m.lcErrorMsg  ) Then
   *-- 系统性逻辑错误
   ?m.lcErrorMsg
Else
    *-- 出错信息
    If "Errors" $ m.lcResult Then
        ?m.lcResult
        Return
    Else
        *-- 2.1    解析为表
        *-- 2.2    将oJson数据插入Cursor
        *-- 2.3 需要判定是否获取到了指定条件的全部记录
        
        ? "        2.1 反序化SaleOrder报文:"
        Local loJsonSAL_SaleOrder
        m.loJsonSAL_SaleOrder = oJson.decode( m.lcResult )
        If  !Empty( oJson.cError ) Then
            ?? "失败,原因:" + oJson.cError
            Return
        Else
            ?? "成功"
        Endif
        
        ?"        2.2 解析为表:"
        Local loError
        Try
            For m.lnCount = 1 To m.loJsonSAL_SaleOrder .nsize
               Insert Into SAL_SaleOrder From Array  m.loJsonSAL_SaleOrder.Array[m.lnCount].Array
            Endfor
        Catch To loError
        Endtry
        If Type( "loError.Message" ) == "C"  Then
           ??  "失败,原因:" + m.loError.Message
        Else
           ??  "成功"
        Endif
        Browse
    Endif
Endif
3 天前 09:33
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:322
专家分:750
注 册:2021-11-24
收藏
得分:0 
金蝶有 OpenApiSDK ,每个API官网描述都很详细,也有测试工具。
通过 OpenApi 对接时如果对金蝶表结构不是很了解的话,一般比较耗时。

金蝶对接,难的不是技术,而是这种复杂的表结构,一旦玩上,就会耗用大量的时间,所以不是这个行业的,建议不要搞

体现不出价值,还把时间搭进去,实在不划算,这种事 建议还是让小青年的小白去做,比较合适。




[此贴子已经被作者于2024-12-31 10:11编辑过]

3 天前 10:09
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:489
专家分:630
注 册:2013-5-14
收藏
得分:0 
有道理,不过你把问题想的太复杂了!就几个表几个字段,需要什么,多简单的事情!有个金蝶服务分分搞定的事情。我现在是MS,Google,忠实客户群体,每个月所交费用也不低!有个服务就是好啊,正版与盗版之间其实技术那点事情一点就破!正版无非就是有个服务,出问题有人帮你解决而以,所以服务很重要,技术架框也就是那么回事。

[此贴子已经被作者于2024-12-31 11:58编辑过]

3 天前 11:53
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:829
专家分:1256
注 册:2021-10-13
收藏
得分:0 
回复 5楼 sdta
那可不行
3 天前 17:41
快速回复:一个 jsondata 挑战去解析
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025154 second(s), 10 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved