2014-12-31 1 views
4

도움을 주셔서 감사합니다.MS Access에서 VBA의 구문 분석 JSON (US BLS)

나는에서 찾을 수있는 JSON VB6 파서 사용하고 있습니다 : VB JSON Parser

을 나는 다음과 같은 JSON 응답 (BLS의 웹 사이트에서 온다, 특히이 링크 Here 있습니다

{ "상태" : "응답 시간": 71, "메시지": [], "결과": { "시리즈": [{ "seriesID": "WPS012", "데이터": [{ "연도": " 2014 ","마침표 ":"M11 ","periodName ":"11 월 ","값 ":"153.6 ","각주 ": [{"code ":"P ","text ":"예비. 원 발행일로부터 4 개월 후에 수정 될 수 있습니다. "}]}, {"year " : "2014", "마침표": "M10", "periodName": "10 월", "값": "147.4", "각주": [{ "code": "P", "text" 모든 인덱스는 원 발행 후 4 개월 후에 개정 될 수 있습니다. "}]}, {"연도 ":"2014 ","기간 ":"M09 ","기간 이름 ":"9 월 ","값 ":"146.5 " "각주": [{ "코드": "P", "텍스트": "예비. 모든 색인은 원래 발행 후 4 개월 후에 개정 될 수 있습니다. "}]}, {"year ":"2014 ","period ":"M08 ","periodName ":"August ","value ":"156.9 " "각주": [{ "코드": "P", "텍스트": "예비. 모든 색인은 원 발행 후 4 개월 후에 개정 될 수 있습니다. "}]}, {"연도 ":"2014 ","기간 ":"M07 ","기간 이름 ":"7 월 ","값 ":"156.4 " "각주": [{}}}, { "연도": "2014", "기간": "M06", "기간 이름": "6 월", "값": "179.6", "각주" ]}, { "연도": "2014", "기간": "M05", "기간 이름": "5 월", "값": "205.4", "각주": [{}]}, { " ","기간 ":"M04 ","기간 이름 ":"4 월 ","값 ":"201.6 ","각주 ": [{}]}, {"연도 ":"2014 " 기간 : "M03", "기간 이름": "3 월", "값": "188.1", "각주": [{}]}, { "연도": "2014", "기간": "M02" "periodName": "February", "value": "180.2", "footnotes": [{}]}, { "year": "2014", "period": "M01" , "값": "177.8", "각주": [{}]}, { "연도": "2013", "기간": "M12", "periodName": "12 월", "값": "183.2 ","각주 ": [{}}}, {"연도 ":"2013 ","마침표 ":"M11 ","periodName ":"11 월 ","값 ":"180.4 " {}}}, { "연도": "2013", "기간": "M10", "기간 이름": "10 월", "값": "186.4", "각주" 년 ":"2013 ","기간 ":"M09 ","periodName ":"9 월 ","value ":"197.1 ","각주 ": [{}]}, {"year ":"2013 ","period ":"M08 " {{}}}, { "year": "2013", "period": "M07", "periodName": "July", "value": "252.9", "각주": [{} ","2013 ","마침표 ":"M06 ","periodName ":"June ","value ":"259.0 ","footnotes " : {{}}, { "year": "2013", "period": "M05", "p eriodName": "5 월", "값": "263.7", "각주": [{}] }, { "year": "2013", "period": "M04", "periodName": "April", "value": "249.3", "각주": [{}]}, { "year" "2013", "기간": "M03", "기간 이름": "3 월", "값": "268.1", "각주": [{}]}, { "연도" : "M02", "periodName": "February", "value": "267.1", "각주": [{}]}, { "year": "2013", "period": "M01", "periodName ","값 ":"279.7 ","각주 ": [{}]}, {"연도 ":"2012 ","기간 ":"M12 ","periodName ":"12 월 " 값 ":"283.2 ","각주 ": [{}"}, { "연도": "2012", "마침표": "M11", "periodName": "11 월" "각주": [{}}}, { "연도": "2012", "기간": "M10", "기간 이름": "Octo bear ","value ":"286.7 ","footnotes ": [{}]}, {"year ":"2012 ","period ":"M09 ","periodName ":"September " "288.2", "각주", "각주", "각주", "각주": " : {{}}}, { "년": "2012", "마침표": "M07", "periodName": "7 월", "값": "275.8", "각주" { "year": "2012", "period": "M06", "periodName": "June", "value": "226.9", "각주": {{}}}, { "year": "2012 ","perio d ":"M05 ","periodName ":"May ","value ":"233.7 ","각주 ": [{}]}, {"year ":"2012 " : "M04", "periodName": "April", "value": "239.9", "각주": [{}]}, { "year": "2012", "period": "M03" ","값 ":"243.6 ","각주 ": [{}]}, {"연도 ":"2012 ","기간 ":"M02 ","periodName ":"February " 값 ":"239.9 ","각주 ": [{}"}, { "연도": "2012", "마침표": "M01", "periodName": "1 월", "값": "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