ASP JSON: Object not a collection

2020-01-29 21:17发布

问题:

How should I retrieve PitcherID from this JSON? I am using the class from http://aspjson.com.

JSON

[
 {
  "PitcherID": "456068"
 },
 {
  "PitcherID": "431148"
 }
]

Code

oJSON.loadJSON("...")

For Each thing In oJSON.data("PitcherID")
    Set this = oJSON.data("PitcherID").item(thing)
    response.write this.item("PitcherID")
Next

Error

Microsoft VBScript runtime error '800a01c3'

Object not a collection

回答1:

In my experience it's far easier to just use JScript as your server side scripting language than to use the aspjson class. You could render your JSON object as follows

<%@language="javascript"%>
<!DOCTYPE html>
<html>
<body>


    <%
    var oJSON =[
     {
      "PitcherID": "456068"
     },
     {
      "PitcherID": "431148"
     }
    ]
    for (i in oJSON)
    { 
     Response.write((oJSON[i].PitcherID) + "<br />");
    } 
    %>

</body>
</html>

I realise that this may cause problems if the json processing is only part of a page and the rest of it uses VBScript, however you can execute server side JS in what is otherwise a VBS page by using <script runat="server"> eg

<%@language="VBScript"%>
<!DOCTYPE html>
<html>
<head>

<script language="javascript" runat="server">
var oJSON =[
 {
  "PitcherID": "456068"
 },
 {
  "PitcherID": "431148"
 }
]
var strout = ""
for (i in oJSON)
{ 
 strout = strout + ((oJSON[i].PitcherID) + "<br />");
} 
</script>


</head>
<body>

<% Response.write strout %>

</body>
</html>


回答2:

The problem is the class from http://aspjson.com is limited and personally I've always found it hard to find decent examples of how to use it.

Why do you get the Object not a collection error?

It's quite simple really the object you are trying to iterate through like an array / collection is not one.

This line

For Each thing In oJSON.data("PitcherID")

will fail because oJSON.data("PitcherID") is not a collection object which means you cannot iterate through it. For PitcherID to be enumerable the source JSON structure would look more like this

{
  "PitcherID": [
    "456068",
    "431148"
  ]
}

for example.


Links

  • Any good libraries for parsing JSON in Classic ASP?