英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论