注册 登录
编程论坛 VFP论坛

如何获取 json对象的属性的数量 和 数组属性的下标数量

easyppt 发布于 2024-06-12 09:47, 413 次点击
m.oScript = Createobject("MSScriptControl.ScriptControl")
m.oScript.Language = "jscript"

通过 ScriptControl 解析 json 时,返回的 json对象,这个对象如何再次 传递给 ScriptControl 来获取某个 json节点下的:
属性的数量 或 某个数组属性的下标数量

比如 json 字符串: jsonString = [{"key1":"value1","key2":"value2"}]
这里没设置数组属性,但实际有数组属性的。

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

5 回复
#2
吹水佬2024-06-12 21:50
以下是引用easyppt在2024-6-12 09:47:19的发言:

比如 json 字符串: jsonString = [{"key1":"value1","key2":"value2"}]
这里没设置数组属性,但实际有数组属性的。

jsonString不像JSON,像数组(一个元素为json数据)
另ScriptControl不是解释器,JS自定义的对象属性或值对VFP不直接可见。
可以写JS代码将运算结果返回给VFP。

#3
easyppt2024-06-14 09:02
谢谢吹版,原来是要写自定义js啊

另外,还有一个问题,ScriptControl返回的json对象,怎么再转成 json字符串啊,js 有这样的反转函数吗
#4
laowan0012024-06-14 09:47
推荐使用木瓜大师的foxjson类,我一直在用,很可靠
楼主需要的那些都有
只有本站会员才能查看附件,请 登录



#5
吹水佬2024-06-14 21:41
以下是引用easyppt在2024-6-14 09:02:42的发言:

谢谢吹版,原来是要写自定义js啊

另外,还有一个问题,ScriptControl返回的json对象,怎么再转成 json字符串啊,js 有这样的反转函数吗

ScriptControl不能解释JS,用起来麻烦点,简单点也要调用现成的JS库来处理。
或者可以考虑用IE的解释器,如:
程序代码:

TEXT TO jsonString TEXTMERGE NOSHOW PRETEXT 15
{"array":[{"key1":"value1","key2":"value2"}]}
ENDTEXT

TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
<script>
var json        = function(jsonString){return JSON.parse(jsonString);};
var toStringify = function(obj){return JSON.stringify(obj);};
var toString    = function(obj){return Object.prototype.toString.call(obj);};
var getValue    = function(obj,name){return obj[name];};
var isArray     = function(obj){return Array.isArray(obj);};
var getArray    = function(obj,num){return obj[num];};
</script>
ENDTEXT

dom = CREATEOBJECT("htmlfile")
dom.write(jsCode)
win  = dom.parentWindow
json = win.json(jsonString)
? win.toStringify(json)
? win.toString(json.array)
? win.isArray(json.array)
FOR i=0 TO json.array.length-1
    obj = win.getArray(json.array,i)
    ? win.getValue(obj,"key1"), win.getValue(obj,"key2")
ENDFOR


显示结果:
只有本站会员才能查看附件,请 登录


#6
schtg2024-06-15 05:51
回复 5楼 吹水佬
好!谢谢!
1