2017-06-15 7 views
0

私は、より大きなプロジェクトの一部としてAPIからJSONデータを少し解析しようとしています.VBA/Jsonに関する限られた経験のために、私のVBAコードで何が問題になっているのか。VBA Json Parse- ParserがJsonを正しく分割していない

私は以下のVBA Json Parsersを使用していますが、基本的には同じポイントで作業をやめ、「不完全な解析」をします。 VBA-JSON https://code.google.com/archive/p/vba-json vbjson www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680

私が解析しようとしていますJSONは以下の通りです:

{"links":[],"content":{"carrier":{"allowedToOperate":"Y","bipdInsuranceOnFile":"1000","bipdInsuranceRequired":"Y","bipdRequiredAmount":"750","bondInsuranceOnFile":"0","bondInsuranceRequired":"N","brokerAuthorityStatus":"N","cargoInsuranceOnFile":"0","cargoInsuranceRequired":"N","carrierOperation":{"carrierOperationCode":"A","carrierOperationDesc":"Interstate"},"commonAuthorityStatus":"A","contractAuthorityStatus":"A","crashTotal":19,"dbaName":null,"dotNumber":124871,"driverInsp":974,"driverOosInsp":33,"driverOosRate":3.38809034907597535934291581108829568789,"driverOosRateNationalAverage":"5.51","ein":460396676,"fatalCrash":0,"hazmatInsp":0,"hazmatOosInsp":0,"hazmatOosRate":0,"hazmatOosRateNationalAverage":"4.5","injCrash":6,"isPassengerCarrier":"N","issScore":null,"legalName":"A&A EXPRESS LLC","oosDate":null,"oosRateNationalAverageYear":"2009-2010","phone":"6055822402","phyCity":"BRANDON","phyCountry":"US","phyState":"SD","phyStreet":"1015 9TH AVENUE NORTH","phyZipcode":"57005","reviewDate":"2016-09-23","reviewType":"N","safetyRating":"S","safetyRatingDate":"2008-08-29","safetyReviewDate":"2016-09-23","safetyReviewType":"N","snapshotDate":"1485493200000","statusCode":"A","totalDrivers":237,"totalPowerUnits":253,"towawayCrash":13,"vehicleInsp":477,"vehicleOosInsp":58,"vehicleOosRate":12.15932914046121593291404612159329140461,"vehicleOosRateNationalAverage":"20.72"},"links" 

私のVBAのコードは次のようになります。

Public Sub PARSEJSON() 
Dim reader As New XMLHTTP60 
Dim api As Object 
Dim WS As Worksheet 
Dim item As Variant 

reader.Open "GET", "https://mobile.fmcsa.dot.gov/qc/services/carriers/124871?webKey=APIKEY", False 
reader.send 

    Set WS = ActiveSheet 
    Set api = JSON.parse(reader.responseText) 
     For Each item In api 
      WS.Range("a3").Value = item("") 


     Next 


End Sub 

パーサは次のように結果が得られたので、私は私が必要な値を参照するようにJSONに入ることができません0

photo of watcher in VBA

JsonパーサはAPIからJson文字列の一部を分解しているようですが、それは公式サイトのものですから、共通のJson形式である必要があると仮定しています。この記事では、私の問題の範囲を網羅するために十分な詳細を入れていただきたいと思います。

+0

あなたのJSON文字列が有効であることを確認してください。 – PMerlet

+0

https://jsonlint.com/で文字列をチェックし、有効なJson! @Cubi – hankmoodie

答えて

0

私はこの問題を解決しました。辞書を参照する方法を見て、間違った構文を使用して、必要ではなかった。

新しいVBAコードは、私が望む結果が得られます。

Public Sub PARSEJSON() 
Dim reader As New XMLHTTP60 
Dim dict As Object 
Dim api As New Scripting.Dictionary 
Dim json As New Class1 
Dim WS As Worksheet 
Dim key As Variant 
Dim item As Variant 



reader.Open "GET", "https://mobile.fmcsa.dot.gov/qc/services/carriers/124871?webKey=APIKEY", False 
reader.send 

    Set WS = ActiveSheet 
    Set api = json.parse(reader.responseText) 
     MsgBox api("content")("carrier").Count 
     MsgBox api.item("content")("carrier")("driverOosInsp") 
     WS.Range("a1").value = api.item("content")("carrier")("driverOosInsp") 
End Sub 
関連する問題