注册 登录
编程论坛 VFP论坛

求教 foxjson.ff 如果json串过长,会报错!

weiyisc 发布于 2023-04-09 17:02, 1851 次点击
如题!请指教....

有其它json解析库吗?

附:文件
只有本站会员才能查看附件,请 登录
20 回复
#2
kangss2023-04-09 17:07
775K看样子字符串不算长

你没说谁?哪?啥?报错
#3
sdta2023-04-09 17:17
用ALINES()解析5MB数据都没问题
#4
weiyisc2023-04-09 17:49
回复 2楼 kangss
报这个错。
只有本站会员才能查看附件,请 登录
#5
weiyisc2023-04-09 17:50
回复 3楼 sdta
能否给个例子?
#6
sdta2023-04-09 17:58
要解析什么内容
#7
weiyisc2023-04-09 18:12
回复 6楼 sdta
output下面data下面data列表
#8
csyx2023-04-09 19:04
你这是 utf-8 编码的 txt,先另存为 ansi 再解析
#9
sdta2023-04-09 20:41
程序代码:
CREATE CURSOR tt (id c(20), hilistCode c(30), hilistName c(80), updtTime c(19))
lcTxt = STRCONV(FILETOSTR("json.txt"), 11)
ALINES(laTxt, lcTxt, 1+4, '"data":[{', '},{', '}]')
FOR ln1 = 2 TO ALINES(laTxt, lcTxt, 1+4, '"data":[{', '},{', '}]') - 1
    ALINES(laStr, laTxt[ln1], ",")
    APPEND BLANK
    FOR ln2 = 1 TO 4 && 共31个字段,只取了4个
        lc1 = STREXTRACT(laStr[ln2], SPACE(0), ":")
        lc2 = STREXTRACT(laStr[ln2], ":", SPACE(0))
        REPLACE (lc1) WITH &lc2
    ENDFOR
ENDFOR
BROWSE

只有本站会员才能查看附件,请 登录
#10
吹水佬2023-04-09 21:07
只有本站会员才能查看附件,请 登录

程序代码:
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
#11
weiyisc2023-04-09 21:12
回复 9楼 sdta
感谢感谢!领教了。
#12
weiyisc2023-04-09 21:13
回复 10楼 吹水佬
感谢吹版!另外请教一个问题。一个变量能存多少字符?
#13
sdta2023-04-09 21:38
回复 10楼 吹水佬
吹版水平就是高
#14
吹水佬2023-04-09 22:14
以下是引用weiyisc在2023-4-9 21:13:41的发言:

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

可以测试一下
帮助文件说到的有:
只有本站会员才能查看附件,请 登录
#15
easyppt2023-04-09 22:14
哇塞,两位帮主 真厉害,分别以不同的方式解析了json,我对VFP操作json 几乎没怎么用过,借楼主的宝贴,请教一下,你们是如何把VFP的表记录生成json的啊,谢谢!!

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

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

#16
吹水佬2023-04-09 22:42
以下是引用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()可以转换
#17
easyppt2023-04-09 22:52
吹版还没休息啊,感谢回复!
#18
weiyisc2023-04-09 23:09
以下是引用吹水佬在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转小写??,我尝试直接传入大小写并存的字符串。就报错,找不到节点。
只有本站会员才能查看附件,请 登录
#19
吹水佬2023-04-09 23:50
回复 18楼 weiyisc
此时好像对name只认小写,具体情况不明。
有大写的value还要转换回来,有点麻烦。

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

#20
吹水佬2023-04-10 10:50
看似是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编辑过]

#21
weiyisc2023-04-10 13:55
回复 20楼 吹水佬
是的,经过测试确实奇怪。只能用js代码来解析。
1