2016-09-01 13 views
-1

JSON文字列(同じ形式)の配列をループしてコードが配列の最後に到達するまで左の弦)。特定の識別子(すべてのセットに存在する)が次の配列に追加情報を持たないことを識別することによって、最後に到達したことを認識するコードが必要です。だから、私は "この識別子がコンテンツを持っている間"と言う "while"構文を探していると思います。以下のコードに従ってJSONの解析を進めてください。私の既存のコードは、長さを知っている文字列の配列に対応しています。残念ながら、長さは可変なので、長さに合わせて柔軟な構文が必要です(つまり、For 0〜nは毎回動作しません)。構文要求:JSON文字列(VBA)の配列を解析するための "While"構文

私が解析していますJSONコードは、この形式になります。

ここ
{"id":1,"prices":[{"name":"expressTaxi","cost":{"base":"USD4.50","fareType": 
"time_plus_distance","cancelFee":"USD10.00","minimumAmt":"USD8.00","perMinute":"USD1.50", 
"perDistanceUnit":"USD3.00"}}] 
''note that this could have multiple arrays embedded. That is, from the "name" key to 
''the "perDistanceUnit" key would all repeat, with different value pairs. 
''The number of "name" to "perDistanceUnit" arrays is unknown. 

私はしばらくの間、ループのいくつかのタイプを強化したい識別子の構造は(「i」は依存インデックス番号ですループ中の#ofループはまだ実装されていません)。

Json("prices")(i)("name") 

だから、理想的のようなものを探している:私は長さを知っているとき

"While Json("prices")(i)("name") has information" then proceed on.... 

再び注意してください、すべてが動作します - ちょうど小さな構文のアップデートを探して、ありがとうございました! UPDATE:以下の完全なコード:

Option Explicit 

Sub getJSON() 
sheetCount = 1 
i = 1 
urlArray = Array("URL1", “URL2”, “URL3”) 

Dim MyRequest As Object: Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
Dim MyUrls: MyUrls = urlArray 
Dim k As Long 
Dim Json As Object 

For k = LBound(MyUrls) To UBound(MyUrls) 
    With MyRequest 
     .Open "GET", MyUrls(k) 
     .Send 
     Set Json = JsonConverter.ParseJson(.ResponseText) 
     ''[where I’d like some type of While statement checking into the below line for content] 
     Sheets("Sheet" & sheetCount).Cells(i, 1) = Json("prices")(i)("name") 
     Sheets("Sheet" & sheetCount).Cells(i, 2) = Json("prices")(i)("cost")("base") 
     i = i + 1 
    End With 
sheetCount = sheetCount + 1 
Next 
End Sub 
+0

あなたは上記の完全なコードを更新JSON –

+0

@TimWilliamsを解析している方法など、既存のコードを表示する必要があります。 – Kyle

+0

'Debug.Print Json(" prices ")。Countは、そこにいくつの要素があるかを示します。たぶん、あなたのJSONのより大きなサンプルを投稿することができますか? –

答えて

1

私はあなたが使用しているライブラリとその慣れていないんだが、それはで囲まれたオブジェクトディクショナリのオブジェクトに({ }で囲まれた項目)、および配列(物事を変換のようにそれはそうビット[ ])をコレクションに追加します。

解析されたJSONの構造によっては、これらのオブジェクトがネストされる場合があります。辞書内の1つの要素はCollection(配列)になります。

幸運にも、これらのオブジェクトタイプの両方に、Countというプロパティがあります(辞書タイプには "keys"コレクションもあります)。各「価格」をループするので

Dim i As Long, p As Object 

For i = 1 To Json("prices").Count 
    Set p = Json("prices")(i) 
    Debug.Print p("name"), p("cost")("base"), p("cost")("fareType") 
Next i 
+0

SUPER HELPFUL - 助けてくれてありがとう、@ TimWilliams!今私はちょうど正しいセル/シートにこれらを印刷する必要があります! – Kyle

関連する問題