【发布时间】:2016-11-05 22:44:53
【问题描述】:
我有一个我试图在 VBA 中解析的 JSON。我已成功解析出“优惠”数组。在“offers”数组中是另一个数组“prices”“USD”。
问题在于并非每个“优惠”对象都有“美元”数组。我正在尝试创建一个可以用来制作表格/工作表的对象,但我什至无法在调试模式下打印这些对象。这可行但失败了,因为并非每个 Dict OfferDetails 都包含“USD”对象。
我想做的是能够打印字符串,如果“USD”对象丢失,只需跳过它,只打印具有“USD”的对象。我已经尝试过 IsMissing(在代码中),但是当它碰到丢失的“USD”对象时它失败了。
知道如何使用“USD”值获取此字符串吗?请注意,“USD”是一个数组,包含多个对象,但我也不知道如何处理它们。理想情况下,我想以与“报价”相同的方式解析“美元”。我完全迷失了,因为我在 VBA 方面不是很好
这是一个带有有效 Web JSON 的工作脚本。
Sub getJSONEP_lib_working()
'Need the JsonConverter found here https://github.com/VBA-tools/VBA-JSON
'Need the Microsoft Scripting Runtime
Dim Parsed As Dictionary
Dim Item As Dictionary
Dim OfferDetails As Dictionary
Dim Price As Dictionary
Dim USD As Dictionary
URL = "http://wraymac.com/JSON/example1.json"
url2 = "[{" & """mpn""" & ":" & """41202""" & "}]"
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "GET", URL
MyRequest.Send
JsonString = MyRequest.ResponseText
Dim json As Object
Set json = JsonConverter.ParseJson(JsonString)
Set Parsed = JsonConverter.ParseJson(MyRequest.ResponseText)
For Each Item In Parsed("results")(1)("items")
For Each OfferDetails In Item("offers")
'I tried this it doesn't work, it fails when it finds a non existent "USD"
If Not IsMissing(OfferDetails("prices")("USD")(1)(1)) Then
Debug.Print OfferDetails("prices")("USD")(1)(1)
Else
Debug.Print "Missing"
End If
x = Item("mpn") & " " & "sku" & " - " & OfferDetails("sku") & "," & "UID" & " - " & OfferDetails("seller")("uid") & " " & OfferDetails("moq") & "packaging" & " = " & OfferDetails("packaging") & " " & OfferDetails("seller")("name") & " " & Item("manufacturer")("name")
Debug.Print x
'This works but fails because not every Dict OfferDetails contains the "USD" object
'x = Item("mpn") & " " & "sku" & " - " & OfferDetails("sku") & "," & "UID" & " - " & OfferDetails("seller")("uid") & " " & OfferDetails("moq") & "packaging" & " = " & OfferDetails("packaging") & " " & OfferDetails("seller")("name") & " " & Item("manufacturer")("name")& " "&OfferDetails("prices")("USD")(1)(1)
Next OfferDetails
Next
End Sub
【问题讨论】:
-
您能告诉我们实际返回的 JSON 字符串吗?
-
它很长,我没有在我的消息中发布的原因。所以你可以在这里得到它...wraymac.com/JSON/example1.json "wraymac.com/JSON/example1.json" 如果这不起作用,我可以发布它
-
考虑到这里并稍微格式化一下你的 JSON...jsonprettyprint.com/json-pretty-printer.php
-
我使用json.parser.online.fr/beta,只是剪切和粘贴,显示所有内容、类型和索引,
标签: arrays json excel vba ms-access