VBA-JSON으로 JSON 문자열을 만들어보세요!

5971 단어 JSONVBA

소개



VBA에서 WebAPI를 사용할 때, 데이터 취득(GET) 처리에서는 이 기사 과 같이 JSON 퍼스의 정보가 비교적 많이 공개되고 있었지만, 데이터의 송신(POST라든지)시에 사용하는 Excel 데이터⇒JSON 데이터 작성 방법을 찾지 못했기 때문에 메모입니다.

VBA-JSON의 도입 방법등등은 상기 링크등이나, Git의 ReadMe 봐 주세요.

Json 데이터 작성 개요



VBA-JSON에서 Json 데이터를 생성하려면 "JsonConverter.ConvertToJson"을 사용하십시오. 이 함수는 인수에 Dictionary 배열을 취하고 반환 값은 String 유형입니다.

WebAPI에서는 싹둑 말하면 이 반환값을 건네주면 OK입니다!

Deictionary 배열의 Key와 value가 JSON의 Key와 Value에 대응하고, 복수의 Key와 Value를 Dictionary 배열에 건네주면, 각각이 JSON의 멤버로서 출력됩니다.

샘플



단일 행



다음과 같이 3열 1행의 테이블을 전제로 합니다.


그 경우에는 아래의 코드와 같이 Dictionary 배열에 Key와 Value를 넣어 JsonConverter.ConvertToJson에 건네주면 ...

sample.bas
    Dim buf As New Dictionary

    'Key項目だけでLoop
    For Each Item In Range("A1:C1")

        '値はOffsetで取得
        Call buf.Add(Item.Value, Item.Offset(1, 0).Value)

    Next

    'Json型文字列取得と結果表示
    MsgBox JsonConverter.ConvertToJson(buf)

다음과 같이 JSON 데이터가 생성됩니다.


WebAPI의 Payload로도 사용할 수 있을 것 같네요.

여러 줄



여러 줄의 경우에는 상당히 까다로워집니다.


복수행의 경우에는 각 행을 Dictionary로 표현하면서, 그것들을 일단 Collection형 배열에 격납합니다. 또한 JsonConverter에 전달하기 위해 Dictionary 배열의 요소에 저장합니다.

sample2.bas
    Dim buf As New Dictionary
    Dim bufColl As New Collection

    '行ループ
    For i = 1 To 2

        'Key項目だけでLoop 列ループ
        For Each Item In Range("A1:C1")

            '値はOffsetで取得
            Call buf.Add(Item.Value, Item.Offset(i, 0).Value)

        Next

        'DictionaryをCollectionに格納
        Call bufColl.Add(buf)

        '次ループに備えDictionary初期化。これをしないとKey重複エラーになる
        Set buf = Nothing
        Set buf = New Dictionary

    Next i

    'CollectionをDictionaryに格納
    Call buf.Add("items", bufColl)

    'Json型文字列取得
    MsgBox JsonConverter.ConvertToJson(buf)




배열로 출력되었습니다.

Collection을 사용하면 부모가 1이고 자식 요소가 N인 경우에도 사용할 수 있으며, 그 계층은 몇 개라도 깊게 할 수 있습니다.

요약



꽤 쉽게 Excel에서 JSON 데이터를 만들 수 있습니다.
여러 행을 배열로 만들고 싶을 때만 Collection을 사용하십시오.

좋은 웹페이지 즐겨찾기