将VBA-WEB字典的格式调整为JSON主体。

huangapple go评论144阅读模式
英文:

Format Adjustment for VBA-WEB dictionary to JSON Body

问题

{
  "applicationId": "customsHub",
  "exportAsContentType": "NOT_ZIPPED_SINGLE",
  "documents": 
  {
    "documentIds": 
    [
      {
        "documentId": "491e2229-471a-4b18-907a-0e25a312e5a7"
      }
    ]
  }
}
英文:

I asked a question before, but I didn't ask it well... so after I did some more homework I realised I need help with the conversion of VBA dictionary into a specific JSON format to be sent as the Body of an API POST query.

Here is what I have:

Dim Body As New Dictionary

Body.Add "applicationId", "customsHub"
Body.Add "exportAsContentType", "NOT_ZIPPED_SINGLE"
Body.Add "documents", New Dictionary

With Body("documents")
    .Add "documentIds", New Dictionary
    
    With Body("documents")("documentIds")
    .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7"
    End With
    
End With

Output:

{
  "applicationId": "customsHub",
  "exportAsContentType": "NOT_ZIPPED_SINGLE",
  "documents": {
    "documentIds": {
      "documentId": "491e2229-471a-4b18-907a-0e25a312e5a7"
    }
  }

What I need to get -

{
  "applicationId": "customsHub",
  "exportAsContentType": "NOT_ZIPPED_SINGLE",
  "documents": 
  {
    "documentIds": 
    [
      {
        "documentId": "491e2229-471a-4b18-907a-0e25a312e5a7"
      }
    ]
  }
}

How do I add this nested array as part of the VBA dictionary pre-conversion?

答案1

得分: 1

在Json中,"[]"字符表示一个数组。因此,你应该在一个数组内创建最后一个New Dictionary

Sub createDict_REturnJson()
  Dim Body As New scripting.Dictionary

  Body.Add "applicationId", "customsHub"
  Body.Add "exportAsContentType", "NOT_ZIPPED_SINGLE"
  Body.Add "documents", New scripting.Dictionary

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary) '将字典放入一个数组中
    
    With Body("documents")("documentIds")(0) '将项放置在数组的第一个元素中:
    .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7"
    End With
    
  End With

  Dim Json As String '用于测试输出:
  Json = JsonConverter.ConvertToJson(Body, 2) '假设你使用JsonConverter模块...
  Debug.Print Json
End Sub

为了更好地理解,你可以用下面的代码替换这部分:

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary) '将字典放入一个数组中
    
    With Body("documents")("documentIds")(0) '将项放置在数组的第一个元素中:
      .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7"
    End With    
  End With

使用下面的代码替代,将两个字典添加到数组中,第一个字典包含两个键(IDs),第二个字典仅包含一个键(仅用于教学目的...):

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary, New scripting.Dictionary) '将两个字典放入数组中
    
    With Body("documents")("documentIds")(0)
        .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7" '第一个字典的第一个键
        .Add "documentId2", "testID2" '第一个字典的第二个键
    End With
    Body("documents")("documentIds")(1).Add "DocumentID3", "TestID3" '第二个字典的第一个(单一)键...
  End With
英文:

"[]" characters in Json means an array. So you should create the last New Dictionary inside an array:

Sub createDict_REturnJson()
  Dim Body As New scripting.Dictionary

  Body.Add "applicationId", "customsHub"
  Body.Add "exportAsContentType", "NOT_ZIPPED_SINGLE"
  Body.Add "documents", New scripting.Dictionary

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary) 'place the dictionary in an array
    
    With Body("documents")("documentIds")(0) 'place the item as the array first element:
    .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7"
    End With
    
  End With

  Dim Json As String ' to test the output:
  Json = JsonConverter.ConvertToJson(Body, 2) 'supposing that you use JsonConverter module...
  Debug.Print Json
End Sub

To better catch the idea you can replace this part:

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary) 'place the dictionary in an array
    
    With Body("documents")("documentIds")(0) 'place the item as the array first element:
      .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7"
    End With    
  End With

with the next one, adding two dictionaries in the array, the first one keeping two keys (IDs) and the second one only one (only for didactic purpose...):

  With Body("documents")
    .Add "documentIds", Array(New scripting.Dictionary, New scripting.Dictionary) 'placing two dictionaries in the array
    
    With Body("documents")("documentIds")(0)
        .Add "documentId", "491e2229-471a-4b18-907a-0e25a312e5a7" 'first dictionary first key
        .Add "documentId2", "testID2" 'first dictionary second key
    End With
    Body("documents")("documentIds")(1).Add "DocumentID3", "TestID3" 'second dictionary first (single) key...
  End With

huangapple
  • 本文由 发表于 2023年8月10日 16:27:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/76873914.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定