2016-04-23 32 views
0

JSON響應長度在Excel中使用VBA的JSON V2.0.1 VBA解析非一致在Excel VBA中

這裏是JSON響應我從API查詢

{ 
    "currency": { 
    "code": "USD", 
    "name": "US Dollar", 
    "prefix": "$", 
    "postfix": null 
    }, 
    "products": [ 
    { 
     "product_id": xxxxx, 
     "model_code": "xxxxx", 
     "quantity": 1, 
     "price": "45.60", 
     "total": "45.60", 
     "retail_price": "63.84" 
    } 
    ], 
    "shipping": [ 
    { 
     "name": "UPS", 
     "price": 43.83, 
     "delivery": "3 -10 Days delivery" 
    }, 
    { 
     "name": "DHL", 
     "price": 20.29, 
     "delivery": "2-6 days" 
    }, 
    { 
     "name": "FedEx", 
     "price": 31.46, 
     "delivery": "2-6 days" 
    }, 
    { 
     "name": "EMS", 
     "price": 25.74, 
     "delivery": "7 - 25 Days delivery" 
    }, 
    { 
     "name": "Air Mail", 
     "price": 11.85, 
     "delivery": "10 - 25 Days delivery" 
    } 
    ] 
} 

這裏得到的是我的代碼的一部分解析來自「Air Mail」元素的價格。

result = objHTTP.responseText 
Dim Json As Object 
Dim resultAirmailprice As String 
Set Json = JsonConverter.ParseJson(result) 
resultAirmailprice = Json("shipping")(5)("price") 
Cells(2, 2).Value = resultAirmailprice 

當「航空郵件」元素位於「shipping」元素的(5)中時,代碼運行良好。問題是有時候沒有「UPS」和「Air Mail」元素,所以我得到了一個錯誤。

如何編寫解析「Air Mail」價格的代碼,如果不存在,從「EMS」價格(或最便宜的價格)解析?

+0

我不熟悉JsonConverter類,但肯定會嘗試resultAirmailprice = Json(「shipping」)(「Air Mail」)(「price」)。我說這是判斷其他物體是如何獲得的... – MacroMarc

+0

不起作用。由於「Air Mail」是「名稱」的值 – user3394010

回答

0

查看Json解析器代碼,它返回一個Dictionary對象,其中包含其他Dictionary對象(子鍵),對於數組,Collection對象。在Json中,我看到「shipping」是一個數組,所以解析器返回一個Collection對象。

因此,您可以使用所有Collection成員和方法來操作和訪問它。特別是,您可以使用Json("shipping").Count來檢查Shipping集合有多少個元素。或者您可以使用For each x in Json("shipping")迭代集合。

要檢查您是否有字典或集合,可以使用TypeName函數或TypeOf..Is運算符。

+0

不起作用。當「運送」只有4個下標時,我得到了「運行時錯誤,下標超出範圍」。 – user3394010

+0

shippingmethods = Json(「shipping」)。計數 resultAirmailprice = Json(「shipping」)(shippingmethods)(「price」) This works。謝謝。 – user3394010