json - 经典的 ASP JSON 子集

标签 json vbscript asp-classic

我正在使用 http://www.aspjson.com/ 中的经典 ASP JSON 类转换来自外部源的 JSON 提要以便在我的站点内使用。

对于单层集合,我做得很好。

JSON 看起来像这样:

{
   "data":[
      {
         "message":"message 5",
         "id":"5"
      },
      {
         "message":"message 4",
         "id":"4"
      },
      {
         "message":"message 3",
         "id":"3"
      },
      {
         "message":"message 2",
         "id":"2"
      },
      {
         "message":"message 1",
         "id":"1"
      }
   ]
}

代码可以像这样很好地工作:

TheFeed = [url of external json feed]
Set objXML=Server.CreateObject("Microsoft.XMLHTTP")
objXML.Open "GET", TheFeed, False
objXML.Send
strContents=objXML.ResponseText
Set objXML=Nothing

Set oJSON = New aspJSON
oJSON.loadJSON(strContents)

For Each i In oJSON.data("data")
    Set this = oJSON.data("data").item(i)
    response.write this.item("message")
end if
next

但是,现在提要包含更多信息,其中一些信息位于该顶级集合的子集合中,我真的在努力研究如何使用我可用的数据/项目选项来访问它。可能是我做不到我想做的事,如果有人能证实这一点,我将不胜感激,但我假设更有可能是我的代码不正确。

所以我的更复杂的 feed 看起来更像这样(因为这是一个外部 feed,我无权控制 JSON 的生成方式,我只能使用我得到的东西):

{
   "data":[
      {
         "message":"message 5",
         "id":"5"
      },
      {
         "message":"message 4",
         "id":"4"
      },
      {
         "message":"message 3",
         "id":"3"
      },
      {
         "message":"message 2",
         "id":"2",
         "attachments":{
            "data":[
               {
                  "subattachments":{
                     "data":[
                        {
                           "media":{
                              "image":{
                                 "src":"1.jpg"
                              }
                           },
                           "type":"photo"
                        },
                        {
                           "media":{
                              "image":{
                                 "src":"2.jpg"
                              }
                           },
                           "type":"photo"
                        },
                        {
                           "media":{
                              "image":{
                                 "src":"3.jpg"
                              }
                           },
                           "type":"photo"
                        }
                     ]
                  }
               }
            ]
         }
      },
      {
         "message":"message 1",
         "id":"1"
      }
   ]
}

我真正喜欢做的是在我的初始循环中有一个辅助循环来浏览这些照片附件。但我只是不确定如何找到要循环的 JSON 的正确位。

到目前为止,我所做的一切都没有对我造成错误:

If Not IsEmpty(this.item("attachments")) Then
  for each i in this.item("attachments")
   set this2 = this.item("attachments").item(i)
   response.write 'here'
 next
end if

这仅在消息 2 上输出一个“此处”,这是我所期望的,但我似乎无法做任何进一步的事情。我尝试使用“子附件”或“附件”级别以下的任何其他内容时都会告诉我“对象不是集合”。

如果有人能阐明我做错了什么,我将不胜感激。

最佳答案

我没有充分使用“数据”项。

这段代码:

If Not IsEmpty(this.item("attachments")) Then
 for each i in this.item("attachments").item("data").item(0).item("subattachments").item("data")
  set this2 = this.item("attachments").item("data").item(0).item("subattachments").item("data").item(i)
  response.write "here"
 next
end if

返回我所希望的多个“这里”。我也可以在一个循环中完成一个循环,但由于第一个集合中只有一个项目,我只是使用 0 索引引用它。

我现在应该可以毫无问题地从他的子附件中找出我需要的元素。

关于json - 经典的 ASP JSON 子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803187/

相关文章:

javascript - 无法访问 Json 输出

c# - 如何在 C# 2.0 中从 List<> 获取最后一个对象

object - 我什么时候需要在经典 asp 中将对象设置为空?

jquery - 如何使用 API 加载部分 View 并获取 Json 数据

javascript - 对 slack 的 JSON post 请求返回 invalid_auth

vbscript - 使用 VBScript Err 对象检查错误

vbscript - 使用 VBScript/WSH 查询 Active Directory 并导出

asp-classic - CDO 电子邮件主题特殊字符错误

iis-7 - 经典 ASP 网站中的 session 超时

java - 如何在 Java 中将 JSON 数组对象转换为 XML 时添加包装器