2014-12-31 3 views
4

Заранее благодарю вас за помощь.Разбор JSON (US BLS) в VBA от MS Access

Я использую JSON VB6 Parser, который можно найти по адресу: VB JSON Parser

У меня есть следующий JSON ответ (Comes с сайта BLS, в частности ссылка Here:

{ "статус" : «REQUEST_SUCCEEDED», «responseTime»: 71, «message»: [], «Results»: { "series": [{"seriesID": "WPS012", "data": [{"year": " 2014 »,« период »:« M11 »,« periodName »:« November »,« value »:« 153.6 »,« footnotes »: [{« code »:« P »,« text »:« Preliminary. подлежат пересмотру через четыре месяца после первоначальной публикации. "}]}, {" year " : "2014", "период": "M10", "periodName": "Октябрь", "значение": "147,4", "сноска": [{ "код": "P", "Текст": "Предварительный. Все индексы подлежат пересмотру через четыре месяца после первоначальной публикации. «}]}, {« Год »:« 2014 »,« период »:« M09 »,« periodName »:« сентябрь »,« значение »:« 146,5 », "сноска": [{ "код": "P", "текст": "Предварительная. Все индексы подлежат пересмотру через четыре месяца после первоначальной публикации. «}]}, {« Год »:« 2014 »,« период »:« M08 »,« periodName »:« Август »,« значение »:« 156,9 », "сноска": [{ "код": "P", "текст": "Предварительная. Все индексы подлежат пересмотру через четыре месяца после первоначальной публикации. «}]}, {« Год »:« 2014 »,« период »:« M07 »,« periodName »:« July »,« value »:« 156.4 », "сноска": [{}]}, { "год": "2014", "период": "M06", "periodName": "июнь", "значение": "179,6", "сноска": [{} ]}, {«год»: «2014», «период»: «M05», «periodName»: «May», «value»: «205.4», «footnotes»: [{}]}, {"year ":" 2014" , "период": "M04", "periodName": "апрель", "значение": "201,6", "сноска": [{}]}, { "год": "2014",» период ":" M03" , "periodName": "Март", "значение": "188.1", "сноска": [{}]}, { "год": "2014", "период": "M02", "periodName": "февраль", "значение": "180,2", "сноски": [{}]}, { "год": "2014", "период": "M01", "periodName": "январь" , "значение": "177,8", "сноски": [{}]}, { "год": "2013", "период": "M12", "periodName": "декабрь", "значение": "183.2 », "сноска": [{}]}, { "год": "2013", "период": "M11", "periodName": "Ноябрь", "значение": "180,4", "сноска": [ {}]}, { "год": "2013", "период": "M10", "periodName": "октябрь", "значение": "186,4", "сноски": [{}]}, {» год ":" 2013" , "период": "M09 " "PeriodName": "сентябрь", "значение": "197,1", "сноски": [{}]}, { "год": "2013", "период": "M08", "periodName":" август», "значение": "222,2", "сноски": [{}]}, { "год": "2013", "период": "M07", "periodName": "Июль", "значение": "252,9", "сноски": [{}]}, { "год": "2013", "период": "M06", "periodName": "июнь", "значение": "259,0", "сноски" : [{}]}, {«год»: «2013», «период»: «M05», «p eriodName»: «May», «value»: «263.7», «footnotes»: [{}] }, { "год": "2013", "период": "M04", "periodName": "апрель", "значение": "249,3", "сноски": [{}]}, { "год": "2013", "период": "M03", "periodName": "Март", "значение": "268,1", "сноска": [{}]}, { "год": "2013", "период" : "M02", "periodName": "Февраль", "значение": "267,1", "сноски": [{}]}, { "год": "2013", "период": "M01", "periodName ":" январь " "значение": "279,7", "сноски": [{}]}, { "год": "2012", "период": "M12", "periodName": "декабрь"," значение ":" 283,2" , "сноски": [{}]}, { "год": "2012", "период": "M11", "periodName": "ноябрь", "значение": "280,8", "сноски": [{}]}, { "год": "2012", "период": "M10", "periodName": "Octo бер», "значение": "286,7", "сноски": [{}]}, { "год": "2012", "период": "M09", "periodName": "сентябрь", "значение": "285,2", "сноски": [{}]}, { "год": "2012", "период": "M08", "periodName": "Август", "значение": "298,9", "сноски" : [{}]}, { "год": "2012", "период": "M07" "periodName": "значение" "июль": "275,8", "сноски": [{}]}, { "год": "2012", "период": "M06", "periodName": "Июнь", "значение": "226,9", "сноски": [{}]}, { "год": "2012 "," perio d ":" M05 "," periodName ":" May "," value ":" 233.7 "," footnotes ": [{}]}, {" year ":" 2012 "," period " : "M04", "periodName": "Апрель", "значение": "239,9", "сноски": [{}]}, { "год": "2012", "период": "M03", "periodName ":" Март " "значение": "243,6", "сноска": [{}]}, { "год": "2012", "период": "M02", "periodName": "февраль"," значение ":" 239,9" , "сноски": [{}]}, { "год": "2012", "период": "M01", "periodName": "январь", "значение": "243,8", «сноски»: [{}]}]}] }} `

Я могу использовать анализатор для возврата «status», «responseTime» и «message». Ничего кроме этого (открытие второй фигурной скобки) я ничего не получаю.

Ниже код, который я пытаюсь использовать:

Dim p As Object 
Set p = JSON.parse(gbl_response) 


'Print the text of a nested property ' 
Debug.Print p.Item("responseTime") 
'Print the text of a property within an array ' 
Debug.Print p.Item("Results").Item("series").Item("seriesID") 

Печать из p.Item («ResponseTime») работает и возвращает «71», однако я получаю ошибку «недопустимое процедуру вызова или аргумент» ошибка во второй попытке печати.

Для жизни меня я искал вокруг и не нашел никаких решений. Я пробовал this, который казался почти идентичным, но, увы, я попытался реплицировать решение здесь и, похоже, не работал.

Благодарим вас за помощь!

ответ

4
Public Const jsonSource As String = "{" & _ 
    """status"": ""REQUEST_SUCCEEDED"", " & _ 
    """responseTime"": 71, " & _ 
    """message"": [ " & _ 
    "], " & _ 
    """Results"": { " & _ 
    """series"": [ " & _ 
     "{ " & _ 
     """seriesID"": ""WPS012"", " & _ 
     """data"": [ " & _ 
      "{ " & _ 
      """year"": ""2014"", " & _ 
      """period"": ""M11"", " & _ 
      """periodName"": ""November"", " & _ 
      """value"": ""153.6"", " & _ 
      """footnotes"": [ " & _ 
       "{ " & _ 
       """code"": ""P"", " & _ 
       """text"": ""Preliminary. All indexes are subject to revision four months after original publication."" " & _ 
       "} " & _ 
      "] " & _ 
      "} " & _ 
     "] " & _ 
     "}]}}" 

Sub JsonTest() 
    Dim jsonData As Scripting.Dictionary 
    Set jsonData = JSON.parse(jsonSource) 

    Dim responseTime As String 
    responseTime = jsonData("responseTime") 

    Dim results As Scripting.Dictionary 
    Set results = jsonData("Results") 

    Dim series As Collection 
    Set series = results("series") 

    Dim seriesItem As Scripting.Dictionary 
    For Each seriesItem In series 
     Dim seriesId As String 
     seriesId = seriesItem("seriesID") 
     Debug.Print seriesId 

     Dim data As Collection 
     Set data = seriesItem("data") 

     Dim dataItem As Scripting.Dictionary 
     For Each dataItem In data 
      Dim year As String 
      year = dataItem("year") 

      Dim period As String 
      period = dataItem("period") 

      Dim periodName As String 
      periodName = dataItem("periodName") 

      Dim value As String 
      value = dataItem("value") 

      Dim footnotes As Collection 
      Set footnotes = dataItem("footnotes") 

      Dim footnotesItem As Scripting.Dictionary 
      For Each footnotesItem In footnotes 
       Dim code As String 
       code = footnotesItem("code") 

       Dim text As String 
       text = footnotesItem("text") 

      Next footnotesItem 
     Next dataItem 
    Next seriesItem 
End Sub 

enter image description here

+0

Ди, вы удивительным, что работает точно так же, как я надеялся. И вы избавили свой мозг от плавления с помощью резонирующего и понятного кодирования. Спасибо! – Dm3k1

+0

Я рад, что это помогло! – dee