我在ASP Classic中获得了JSON结果:
<script language="JScript" runat="server" src="json2.js"></script>
<%
Response.ContentType = "text/html"
Dim HttpReq
Dim Diamond
Set HttpReq = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")
HttpReq.open "GET", "http://url.com?id=" & Request.QueryString("id"), False
HttpReq.send
res = HttpReq.responseText
Set res = JSON.parse(res)
%>
有效。
假设JSON结果如下所示:
res = {
gallery: {
image1: { img: 'source url', thumb: 'source url' },
image2: { img: 'source url', thumb: 'source url' },
image3: { img: 'source url', thumb: 'source url' }
},
another_param1: 'foo',
another param2: 'bar',
...
}
我想迭代画廊对象,不是在JScript中,而是在VBScript中。
我该怎么做?
非常感谢你。
答案 0 :(得分:1)
如果确实需要枚举VBScript中的对象属性,则需要将对象转换为字典。这是一个简单的函数,它将获取JScript对象并返回Scripting.Dictionary
:
<script runat="server" language="javascript">
function JScriptObjectToDictionary(o)
{
var dict = new ActiveXObject("Scripting.Dictionary")
for (var prop in o)
{
if (o.hasOwnProperty(prop))
{
dict.add(prop, o[prop]);
}
}
return dict;
}
</script>
在页面中显示此功能后,您现在可以将gallery
属性转换为字典:
res.gallery = JScriptObjectToDictionary(res.gallery)
然后你可以迭代为:
For Each key in res.gallery
Response.Write key & ": " & res.gallery(key).img & "<br />"
Next
说过值得指出的是像image1,image2这样的系列属性是一个糟糕的选择。如果JSON将gallery定义为简单数组而不是对象,那会更好。如果您能够影响JSON设计,则应该要求对其进行更改。
答案 1 :(得分:0)
AX(ASP Xtreme Evolution)JSON解析器将为您提供帮助。 只是谷歌吧。 在文件中包含AX后
set Info = JSON.parse(RES)
Response.write(Info.gallery & vbNewline)
Response.write(Info.gallery.image & vbNewline)
编辑---
当您需要为图库创建循环时;
dim key:对于Info.keys()中的每个键 Response.write(key&amp; vbNewline) 下
答案 2 :(得分:0)
如果JSON很简单并且总是使用相同的结构,您可以自己解析它,那么外部库需要快速而简单的dno。
res = "{"_
&"gallery: { "_
&" image1: { img: 'source url1', thumb: 'source url1' },"_
&" image2: { img: 'source url2', thumb: 'source url2' },"_
&" image3: { img: 'source url3', thumb: 'source url3' }"_
&"},"_
&"another_param1: 'foo',"_
&"another param2: 'bar'"_
&"}"
'convert the JSON string to an array
Set oRegExpre = new RegExp
oRegExpre.Global = true
oRegExpre.Pattern = "{ img.*?}"
'iterate the array (records)
Set records = oRegExpre.Execute(res)
for each record in records
aRecord = split(record,"'")
key1 = replace(aRecord(0),"{ ","")
key2 = replace(aRecord(2),", ","")
wscript.echo key1 & aRecord(1) 'schow key & value pairs
wscript.echo key2 & aRecord(3)
next
=>
img: source url1
thumb: source url1
img: source url2
thumb: source url2
img: source url3
thumb: source url3