【问题标题】:VBA getting values from a collection?VBA从集合中获取值?
【发布时间】:2014-12-01 11:59:39
【问题描述】:

我对 VBA 很陌生,我不知道如何从集合中获取值。

这是我的代码:

Dim p As Object
Set p = JSON.parse(Response.Content)

Dim links As Object
Set links = p.Item("links")

在“链接”的调试器中我看到:

我正在使用这个库来解析 json:http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html

我在json中的部分是:

"links":[
    {
        "rel":"next",
        "href":"www.google.com"
    }
]

这里如何获取“rel”的值?

【问题讨论】:

  • 不熟悉,但你试过吗,例如debug.print 链接(1)(1)
  • @RonRosenfeld 我试过 Range("A4").Value = links(1)(1) 但内容似乎是空的。
  • 我也不熟悉那个 JSON 解析器,但无论如何。希望您没有设置On Error Resume Next?你有没有试过debug.print links(0)debug.print links(1)
  • @MarkJ 我尝试了 Debug.Print "Hello World" Debug.Print links(1)(1) Debug.Print "Bye" 我看到 Hello World 和 Bye 之间有一个空行他们。所以我认为 (1)(1) 被评估为 null..

标签: json vba excel vb6


【解决方案1】:

不要忘记 ban​​g 运算符,专为按键访问集合而设计:

links(1)!rel

或:

links(1)![rel] 'When there are spaces or reserved words.

【讨论】:

    【解决方案2】:

    我会回答我自己的问题:

    links(1).Item("rel")
    

    工作...

    问候..

    【讨论】:

    • 对于快捷方式,ItemDictionary 的默认属性,因此您可以使用links(1)("rel")
    • @TimHall 谢谢,我不知道。
    • 或者更短的“bang”操作符links!1!rel
    • 如果我只有这个 [ { "rel":"next", "href":"www.google.com" } ] 没有“链接”我该怎么办? @蒂姆霍尔
    • 在这种情况下,您将使用原始解析的响应 p,而不是链接并使用 p(1)("rel")(或来自 wqw 的评论,p!1!rel)
    【解决方案3】:

    使用解析 JSON 的 JavaScript 功能,在 ScriptControl 之上,我们可以在 VBA 中创建一个解析器,它将列出 JSON 中的每个数据点。无论数据结构多么嵌套或复杂,只要我们提供一个有效的 JSON,这个解析器就会返回一个完整的树形结构。

    JavaScript 的 Eval、getKeys 和 getProperty 方法为验证和读取 JSON 提供了构建块。

    结合 VBA 中的递归函数,我们可以遍历 JSON 字符串中的所有键(最多 n 级)。然后使用 Tree 控件(在本文中使用)或字典甚至在简单的工作表上,我们可以根据需要排列 JSON 数据。

    你可以看到完整的VBA代码here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2013-01-01
      • 1970-01-01
      相关资源
      最近更新 更多