标题:求教 foxjson.ff 如果json串过长,会报错!
只看楼主
weiyisc
Rank: 1
等 级:新手上路
帖 子:69
专家分:7
注 册:2009-5-17
得分:0 
回复 9楼 sdta
感谢感谢!领教了。
2023-04-09 21:12
weiyisc
Rank: 1
等 级:新手上路
帖 子:69
专家分:7
注 册:2009-5-17
得分:0 
回复 10楼 吹水佬
感谢吹版!另外请教一个问题。一个变量能存多少字符?
2023-04-09 21:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 10楼 吹水佬
吹版水平就是高

坚守VFP最后的阵地
2023-04-09 21:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用weiyisc在2023-4-9 21:13:41的发言:

感谢吹版!另外请教一个问题。一个变量能存多少字符?

可以测试一下
帮助文件说到的有:
2023-04-09 22:14
easyppt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:119
专家分:169
注 册:2021-11-24
得分:4 
哇塞,两位帮主 真厉害,分别以不同的方式解析了json,我对VFP操作json 几乎没怎么用过,借楼主的宝贴,请教一下,你们是如何把VFP的表记录生成json的啊,谢谢!!

另外,就是 如果字段内容存在 中文,怎么以UTF8的格式生成 json呢

[此贴子已经被作者于2023-4-9 22:15编辑过]

2023-04-09 22:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用easyppt在2023-4-9 22:14:31的发言:

哇塞,两位帮主 真厉害,分别以不同的方式解析了json,我对VFP操作json 几乎没怎么用过,借楼主的宝贴,请教一下,你们是如何把VFP的表记录生成json的啊,谢谢!!

另外,就是 如果字段内容存在 中文,怎么以UTF8的格式生成 json呢

1、可以按要求的格式写,如:
程序代码:
CREATE CURSOR tt (f1 c(10),f2 I)
INSERT INTO tt VALUES ("abcd", 123)
INSERT INTO tt VALUES ("ABCD", 456)
cJson = ''
SCAN 
    cJson = cJson + ',{"f1":"' + ALLTRIM(f1) + '","f2":' + TRANSFORM(f2) + '}'
ENDSCAN
cJson = '{"tt":[' + SUBSTR(cJson,2) + ']}'
? cJson

2、STRCONV()可以转换
2023-04-09 22:42
easyppt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:119
专家分:169
注 册:2021-11-24
得分:0 
吹版还没休息啊,感谢回复!
2023-04-09 22:52
weiyisc
Rank: 1
等 级:新手上路
帖 子:69
专家分:7
注 册:2009-5-17
得分:0 
以下是引用吹水佬在2023-4-9 21:07:24的发言:


jsCode = "var json=" + LOWER(STRCONV(FILETOSTR("解析的JSON.txt"),11))
js = CREATEOBJECT("ScriptControl")
js.Language = "JavaScript"
js.AddCode(jsCode)
json = js.CodeObject.json
? json.output.message    && "message": "成功"
CREATE CURSOR tt (id v(20), hilistCode v(30), hilistName v(30), updtTime v(20))
FOR EACH aJsonData IN json.output.data.data
    INSERT INTO tt VALUES (aJsonData.id, aJsonData.hilistcode, aJsonData.hilistname, aJsonData.updttime)
ENDFOR
SELECT * FROM tt


请教版主:
LOWER(STRCONV(FILETOSTR("解析的JSON.txt"),11)) 为什么需要lower转小写??,我尝试直接传入大小写并存的字符串。就报错,找不到节点。
2023-04-09 23:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 18楼 weiyisc
此时好像对name只认小写,具体情况不明。
有大写的value还要转换回来,有点麻烦。

[此贴子已经被作者于2023-4-9 23:51编辑过]

2023-04-09 23:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
看似是VFP是按小写来解释,有点怪,name含有大写字母不行,对汉字、小写字母、数字就没问题。
用js的命令来解释就没问题。
程序代码:
jsCode = "var json=" + STRCONV(FILETOSTR("解析的JSON.txt"),11)
js = CREATEOBJECT("ScriptControl")
js.Language = "JavaScript"
js.AddCode(jsCode)
json = js.CodeObject.json
? json.output.message    && "message": "成功"
CREATE CURSOR tt (id v(20), hilistCode v(30), hilistName v(120), updtTime v(20))
FOR i=0 TO json.output.data.data.length-1
    INSERT INTO tt VALUES (js.eval("json.output.data.data["+TRANSFORM(i)+"].id"),;
                           js.eval("json.output.data.data["+TRANSFORM(i)+"].hilistCode"),;
                           js.eval("json.output.data.data["+TRANSFORM(i)+"].hilistName"),;
                           js.eval("json.output.data.data["+TRANSFORM(i)+"].updtTime"))
ENDFOR
SELECT * FROM tt


[此贴子已经被作者于2023-4-10 10:53编辑过]

2023-04-10 10:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511847-1-1.html




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

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