【问题标题】:Parsing JSON array in Excel VBA在 Excel VBA 中解析 JSON 数组
【发布时间】:2016-04-05 01:49:20
【问题描述】:

我尝试在另一个线程中遵循该方法,但是代码中的某些部分我不理解并且它对我不起作用。我可以发表评论,因为我还没有达到 50 名声望。 (我包括了另一个线程的响应)

我正在尝试访问 Json 响应,如下所示,我想将细节后的数组横向放入 excel(A1-A6 列),但是在另一篇文章中,我不明白脚本控制方法是什么。

并且没有任何注释行来解释它是什么。我尝试使用它,代码只是在 sc.Eval "var obj=(" & json & ")" 失败

另外, json = {get your json here} 行失败,而是我将其替换为 Json = resp ,其中 resp 是从 API 返回的输出。

非常感谢您的帮助。

Sub Tester()

    Dim json As String
    Dim sc As Object
    Dim o

    Set sc = CreateObject("scriptcontrol")
    sc.Language = "JScript"

    json = {get your json here}

    sc.Eval "var obj=(" & json & ")" 'evaluate the json response
    'add some accessor functions
    sc.AddCode "function getSentenceCount(){return obj.sentences.length;}"
    sc.AddCode "function getSentence(i){return obj.sentences[i];}"

    Debug.Print sc.Run("getSentenceCount")

    Set o = sc.Run("getSentence", 0)
    Debug.Print o.trans, o.orig
End Sub

来自 API 的 JSON 响应

      {"details":[
      {
         "trade":"Micro",
         "trade_tenor":"5yr+"
      },
      {
         "trade":"Odd",
         "trade_tenor":"10yr+"
      },
      {
         "trade":"Round",
         "trade_tenor":"20yr+"
      }   ]}

【问题讨论】:

  • "我已经尝试在另一个线程中遵循该方法" -- 那是什么线程?您的代码无法编译 - 您将 json 声明为字符串,但随后尝试为其分配不是字符串的内容。
  • 嗨,这是我得到的示例代码。 stackoverflow.com/questions/14822672/…
  • 我做了类似的事情,我在 vba 中使用了 http.responsetext 方法,并将响应作为字符串处理,并且它起作用了。但是,在这种情况下,响应结果是一个数组,所以我之前的代码在这里不适用,因为我使用了一个 json 解析器来处理键名。

标签: json api excel vba


【解决方案1】:

只需要一些小的修改:

Sub Tester()

    Dim json As String
    Dim sc As Object
    Dim o, i, num

    Set sc = CreateObject("scriptcontrol")
    sc.Language = "JScript"

    json = Range("A1").Value '{get your json here}

    sc.Eval "var obj=(" & json & ")" 'evaluate the json response
    'add some accessor functions
    sc.AddCode "function getTradeCount(){return obj.details.length;}"
    sc.AddCode "function getTrade(i){return obj.details[i];}"

    num = sc.Run("getTradeCount")

    For i = 0 To num - 1
        Set o = sc.Run("getTrade", i)
        Debug.Print o.trade, o.trade_tenor
    Next i

End Sub

【讨论】:

  • 嗨蒂姆,感谢您的回复。我使用了代码并做了一些修改。但是我在 sc.Eval "var obj=(" & json & ")" 上遇到语法错误,我尝试按照其他线程中的建议删除 & 前后的双引号以解决语法错误。但它仍然没有工作。另外,我稍微修改了代码,以便从 API 返回我的响应,Dim json As String: json = Http.ResponseText on the first line。
  • 完全按照为我发布的工作:我从您的问题中提取了 json 并将其粘贴到 A1 中进行测试。如果您可以更新您的问题以显示您当前的代码,并仔细检查 json 是否正确,我可以看看。
  • 嗨,蒂姆,我现在设法让它工作了。非常感谢。现在我需要找到一种方法将它们水平放回电子表格,从 A2-A7。需要更改 debug.print。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
相关资源
最近更新 更多