【问题标题】:ASP JSON: Object not a collectionASP JSON:对象不是集合
【发布时间】:2015-08-12 20:01:37
【问题描述】:

我应该如何从这个 JSON 中检索 PitcherID?我正在使用来自http://aspjson.com 的课程。

JSON

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

代码

oJSON.loadJSON("...")

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

错误

Microsoft VBScript runtime error '800a01c3'

Object not a collection

【问题讨论】:

  • 错误是告诉你你试图作为一个集合读取的对象我猜是oJSON.data("PitcherID") in For Each thing In oJSON.data("PitcherID") 不是一个集合对象,在这种情况下PitcherID 不是' t 如果您查看 JSON 结构。

标签: json object collections vbscript asp-classic


【解决方案1】:

根据我的经验,使用 JScript 作为服务器端脚本语言比使用 aspjson 类要容易得多。您可以按如下方式呈现您的 JSON 对象

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


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

</body>
</html>

我意识到如果 json 处理只是页面的一部分而其余部分使用 VBScript,这可能会导致问题,但是您可以使用 &lt;script runat="server"&gt; 在其他 VBS 页面中执行服务器端 JS,例如

<%@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>

【讨论】:

  • 我需要使用类似于上面代码中的内容。我将解析 JSON,然后存储在数据库中
  • 这并不能解释为什么 OP 得到的是他们得到的错误。
【解决方案2】:

问题是来自http://aspjson.com 的类是有限的,而且我个人一直发现很难找到如何使用它的好例子。

为什么会出现Object not a collection 错误?

这很简单,您尝试像数组/集合一样迭代的对象不是一个。

这一行

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

将失败,因为oJSON.data("PitcherID") 不是集合对象,这意味着您无法遍历它。要使PitcherID 可枚举,源 JSON 结构看起来更像这样

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

例如。


链接

【讨论】:

  • 那么如何将 Pitcher ID 写入我的页面?
  • @localhost 你的顶层是一个数组(未命名)。您可以控制 JSON 结构吗?如果是这样,请修改 JSON,使其包含具有命名集合的顶级对象,例如 data: [ { "PitcherID": "456068" }, { "PitcherID": "431148" } ];。然后你应该可以在For 循环中调用它,比如For Each thing In oJSON.data("data") 并使用你现有的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多