前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

请问,有用pb解析JSON的方法例子么 - CSDN论坛 - CSDN.NET --> 首页 论坛帮助 论坛牛人 论坛地图 CSDN > CSDN论坛 > PowerBuilder > 基础类 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 u010713649 请问,有用pb解析JSON的方法例子么 [问题点数:100分,结帖人u010713649] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 u010713649 u010713649 等级: 结帖率:90.91% 楼主 发表于: 2013-08-05 11:31:20 csdn下载里有一个,是个演示的dll。 分享到: 更多 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 回复次数:4 lzp_lrp lzp_lrp 等级: 结帖率:98.98% 2295 #1 得分:50 回复于: 2013-08-05 11:42:38 采用pb12来实现,做一个.net 应用,然后嵌入.net代码,具体的.net代码可以参考以下链接 http://gaoling386.blog.163.com/blog/static/5404602420127106123193/ 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 lzp_lrp lzp_lrp 等级: 结帖率:98.98% 2295 #2 得分:0 回复于: 2013-08-05 11:43:42 或者下载一个Newtonsoft.Json.dll,具体的调用方式可以参考以下链接 http://blog.csdn.net/wswqiang/article/details/6783161 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 xufxuf xufxuf 等级: 结帖率:100% #3 得分:50 回复于: 2013-08-05 11:57:00 我用PB写过一个函数,把json串转成datawindow. 不过只适用于单层次的json,就是描述一个关系表的json. global type f_json2datawindow from function_object end type forward prototypes global function string f_json2datawindow (string json_file, ref datawindow dw_1) end prototypes global function string f_json2datawindow (string json_file, ref datawindow dw_1);string ls_file ls_file=json_file //查找替换全部的回车,避免影响判断 ls_file=f_replace_string_quotecharacter(ls_file,char(13),' ') ls_file=f_replace_string_quotecharacter(ls_file,char(10),' ') //查找替换全部的TAB ls_file=f_replace_string_quotecharacter(ls_file,char(9),' ') //滤掉首尾空格 ls_file=trim(ls_file) if len(ls_file) =0 then return('!!无数据') end if if left(ls_file,1) <>'{' or right(ls_file,1)<>'}' then return('!!请用花括号把全部数据括起来。') end if ls_file=mid(ls_file,2,len(ls_file) - 2) //取得花括号里的部分 //取标题 string ls_title string ls_parm[],ls_clm[] string ls_clmname[] long n,m,p,q,i dw_1.reset() n=f_gettagparm(ls_file,'"',ls_parm[]) if n<=2 then return('!!请用半角双引号把表单的标题栏括起来') end if ls_title=ls_parm[2] //找之后的冒号 //得先找标题栏结尾 q p=pos(ls_file,'"'+ls_parm[2]+'"') q=p+len('"'+ls_parm[2]+'"') - 1 //去掉标题栏 ls_file=right(ls_file,len(ls_file) - q ) //过滤掉空格(标题栏与冒号之间的空格) ls_file=trim(ls_file) if left(ls_file,1)<>':' then return('!!标题栏后应跟着冒号') end if //去掉冒号再滤空格再去掉首尾方括号 ls_file=trim(right(ls_file,len(ls_file) - 1)) if left(ls_file,1)<>'[' and right(ls_file,1)<>']' then return('!!请将数据用方括号括起来') end if ls_file=trim(mid(ls_file,2,len(ls_file) - 2)) //得到数据 string ls_data ls_data = ls_file //应至少有1行,否则无法获得字段名 //第一个应该是左花括号 if left(ls_file,1)<>'{' then return('!!第一行数据应用左花括号“{”开头') end if //找第一行的右花括号 p=f_pos_outof_quote(ls_file,'}',1) if p>=2 then else return('!!第一行数据缺少右花括号“}”做结尾') end if //去掉花括号,获得第1行 ls_file=trim(mid(ls_file,2, p - 2)) //列分解 n=f_gettagparm_quotecharacter(ls_file,',',ls_clm) if n=0 then return('!!列数为0') end if //各列取得列名 string ls_clmnames for i= 1 to n ls_clm[i]=trim(ls_clm[i]) // 去掉收尾空格 m=f_gettagparm_quotecharacter(ls_clm[i],':',ref ls_parm) if m=0 then return('!!无法取得第1行第'+string(i)+'列的列名') end if ls_parm[1]=trim(ls_parm[1]) ls_clmname[i]=ls_parm[1] if left(ls_clmname[i],1)='"' then ls_clmname[i] = right(ls_clmname[i],len(ls_clmname[i]) - 1) if right(ls_clmname[i],1)='"' then ls_clmname[i] = left(ls_clmname[i],len(ls_clmname[i]) - 1) if pos(ls_clmname[i],'{')>=1 or pos(ls_clmname[i],'}')>=1 or pos(ls_clmname[i],'[')>=1 or pos(ls_clmname[i],']')>=1 & or pos(ls_clmname[i],',')>=1 or pos(ls_clmname[i],char(9))>=1 then return('!!第1行第'+string(i)+'列的列名中含有非法的字符') end if ls_clmnames = ls_clmnames + '['+ls_clmname[i]+']' next //生成数据窗口 string sqlstr sqlstr='select' for i= 1 to n sqlstr=sqlstr +' lpad(~' ~',1000) as "'+ls_clmname[i]+'" ,' next sqlstr=left(sqlstr,len(sqlstr) - 1) +' from dual ' if f_gendw(dw_1,sqlstr) <>0 then return('!!生成数据窗口失败') end if //从ls_data加载数据 long ll_begin ,ll_end long quote_count long c,r long ret string ls_row string ls_value[] ls_data=trim(ls_data) //过滤首尾空格后,首尾应都是花括号 if left(ls_data,1)<>'{' then return('!!获取数据时,第1行开头不是花括号') end if dw_1.setredraw(false) p=1 ll_begin=p q=f_pos_outof_quote(ls_data,'}',p) r=1 do while p>=1 if q>=1 then quote_count=f_charcount(mid(ls_data ,ll_begin +1,q - ll_begin - 1),'"') //数花括号之间的双引号数量 if mod(quote_count,2)=1 then //是奇数,找到的花括号是数据内容,则忽略 q=f_pos_outof_quote(ls_data,'}',q+1) else ls_row=trim(mid(ls_data,ll_begin+1,q - ll_begin - 1)) r++ c++ dw_1.insertrow(c) //解析列 n=f_gettagparm_quotecharacter(ls_row,',',ls_clm) if n=0 then dw_1.setredraw(true) return('!!第'+string(c)+'行的列数为0') end if //各列取得列名 for i= 1 to n ls_clm[i]=trim(ls_clm[i]) // 去掉收尾空格 m=f_gettagparm_quotecharacter(ls_clm[i],':',ref ls_parm) if m=0 then dw_1.setredraw(true) return('!!无法取得第'+string(c)+'行第'+string(i)+'列的列名') end if ls_parm[1]=trim(ls_parm[1]) ls_clmname[i]=ls_parm[1] if left(ls_clmname[i],1)='"' then ls_clmname[i] = right(ls_clmname[i],len(ls_clmname[i]) - 1) if right(ls_clmname[i],1)='"' then ls_clmname[i] = left(ls_clmname[i],len(ls_clmname[i]) - 1) ls_value[i]=trim(ls_parm[2]) if left(ls_value[i],1)='"' then ls_value[i] = right(ls_value[i],len(ls_value[i]) - 1) if right(ls_value[i],1)='"' then ls_value[i] = left(ls_value[i],len(ls_value[i]) - 1) ret=pos(ls_clmnames,'['+ls_clmname[i]+']') if ret=0 then dw_1.setredraw(true) return('!!第'+string(c)+'行第'+string(i)+'列写入数据窗口时,列名('+ls_clmname[i]+')不存在于第1行') end if ret=dw_1.setitem(c,ls_clmname[i],ls_value[i]) if isnull(ret) then dw_1.setredraw(true) return('!!第'+string(c)+'行第'+string(i)+'列写入数据窗口时,参数为空') elseif ret<>1 then dw_1.setredraw(true) return('!!第'+string(c)+'行第'+string(i)+'列写入数据窗口时,行号或列名('+ls_clmname[i]+')不存在') end if next p=f_pos_outof_quote(ls_data,'{',q + 1) ll_begin=p q=f_pos_outof_quote(ls_data,'}',p) end if else dw_1.setredraw(true) return('!!获取数据时,第'+string(r)+'行找不到右边的花括号') end if loop dw_1.setredraw(true) return(ls_title) end function 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 hovoy hovoy 等级: 结帖率:100% #4 得分:0 回复于: 2013-09-02 14:28:24 支持一下。。。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 写出你眼中的IE11 赢取新年好礼! 勇敢写出你的爱 赢莫文蔚签名大礼 2014年4月微软MVP申请开始了! 陈勇- 敏捷开发现状及发展之路 CSDN高校俱乐部 高校全新改版邀你来学习和挑战 回复内容 每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符(Ctrl+Enter) 请遵守CSDN用户行为准则,不得违反国家法律法规。 转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace [关闭] [关闭]