2016-09-01 5 views
0

内の文字列のJSON配列を解析するには、(その配列ではありませんことを示す?)で:種類の不一致エラー(アレイ):私は、「型の不一致エラー」を受信し続けるVBA

Sub FillTaxiInfo 

For i = 0 To UBound(data("prices")) - 1 

コードがをしようとしています解析JSON(以下「価格」を参照)から:

{"id":1,"prices":[{"name":"expressTaxi","fare":{"fareType":"standard", "base":"$2.50"...}} 

私はブレークポイントを置いて、「価格」を調べるときは、それは価値が '式のコンテキストで定義されていると「タイプ」が空であるされていないことを私に伝えます。

改善のための他の提案があれば幸いです。

私の完全なコード:

Option Explicit 

Sub Run() 

Dim myUrls As Variant 
myUrls = Array("URL1, URL2, URL3") 
FillMultipleCityInfo myUrls, ActiveWorkbook 

End Sub 

Function GetJson(ByVal url As String) As Dictionary 
With New WinHttpRequest 
    .Open "GET", url 
    .Send 
    Set GetJson = JsonConverter.ParseJson(.ResponseText) 
End With 
End Function 

Sub FillTaxiInfo(data As Dictionary, sheet As Worksheet) 
Dim i As Integer, taxi As Dictionary 
For i = 0 To UBound(data("prices")) - 1 
    Set taxi = data("prices")(i) 
    If taxi.Exists("name") Then 
     sheet.Cells(i, 1) = taxi("name") 
     sheet.Cells(i, 2) = taxi("fare")("fareType") 
    End If 
Next i 
End Sub 

Sub FillMultipleCityInfo(urls As Variant, book As Workbook) 
Dim i As Integer, data As Dictionary, sheet As Worksheet 

For i = 0 To UBound(urls) - 1 
    Set data = GetJson(urls(i)) 
    Set sheet = book.Sheets(i + 1) 
    FillTaxiInfo data, sheet 
Next i 
End Sub 

答えて

1

あなたは辞書データ構造のUBound()はなく配列を受け取るしようとしています。 UBound()は配列に対してのみ機能します。

代わりに、辞書のキーを繰り返し処理するように見えます。これを行う方法の小さな例がここにあります。

Public Sub Dict_Iter() 
    Dim key As Variant 'Even though the key is a string -- 
         'Objects/Variant are needed in a For Each Loop 
    Dim dict As New Dictionary 

    'Add several items to the dictionary 
    With dict 
     .Add "a", "a" 
     .Add "b", "b" 
     .Add "c", "c" 
    End With 

    'Iterate over the keys 
    For Each key In dict.Keys() 
     Debug.Print dict(key) 
    Next 
End Sub 
+0

"a"、 "a"は私を混乱させます。ほとんどの場合、キーと値のペアのように見えます。具体的な例を使用して、私は以下を使用します: '。"価格 "、"名前 "は両方とも"キー "で、"名前 "は"価格 "より低いレベル/インデックスです。 さらに、これらの値を上記のようにセルに割り当てると、下の反復を次のように構造化します:'i(i)を初期化した後に' sheet.Cells(i、1)= Debug.Print dict 'と' i + 1'でレイヤ化しますか? – Kyle

+0

"a"、 "a"は実際にはキー値のペアです。ディクショナリデータ型に必要です。キーは一意の要素になりますが、値は一致するキーが見つかったときに返される値です。あなたの特定のプログラムが何をする必要があるのか​​再度は分かりませんが、 "型不一致エラー"(配列ではないことを示していますか?)という質問に答えたと思います。 ' –

+0

私は不幸にも静的な値を返します解決策は私のために働かないでしょう。私は静的なキーを持っているWebからJSONを拝借していますが、値は可変/不明です。 – Kyle