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
あなたは上記の完全なコードを更新JSON –
@TimWilliamsを解析している方法など、既存のコードを表示する必要があります。 – Kyle
'Debug.Print Json(" prices ")。Countは、そこにいくつの要素があるかを示します。たぶん、あなたのJSONのより大きなサンプルを投稿することができますか? –