VBA JSON-获取空值
我这里有一个示例JSON文件VBA JSON-获取空值,json,vba,excel,Json,Vba,Excel,我这里有一个示例JSON文件 { "tournaments": [{ "id": "sr:tournament:30", "name": "Champions League", "sport": { "id": "sr:sport:6", "name": "Handball" }, "category": { "id": "sr:cate
{
"tournaments": [{
"id": "sr:tournament:30",
"name": "Champions League",
"sport": {
"id": "sr:sport:6",
"name": "Handball"
},
"category": {
"id": "sr:category:73",
"name": "International"
},
"current_season": {
"id": "sr:season:41860",
"name": "Champions League 17\/18",
"start_date": "2017-09-02",
"end_date": "2018-05-28",
"year": "17\/18"
}
},
{
"id": "sr:tournament:57",
"name": "DHB Pokal",
"sport": {
"id": "sr:sport:6",
"name": "Handball"
},
"category": {
"id": "sr:category:53",
"name": "Germany",
"country_code": "DEU"
},
"current_season": {
"id": "sr:season:41782",
"name": "DHB Pokal 17\/18",
"start_date": "2017-08-18",
"end_date": "2018-05-31",
"year": "17\/18"
}
}]
}
我用语法分析了这个文件。
我想得到比赛中的所有数据。
获得it的最佳方式是什么
可以使用数组而不是字符串来完成吗<代码>JSons(1)(1)而不是JSons(1)(“id”)
这是我的密码
Set JSons = jsonObj("tournaments")
For Each json In JSons
For i = 1 To json.Count
Cells(a, b) = json(1)
b = b + 1
Next
a = a + 1
b = 1
Next
json(1)
返回的是一个空值,但当我执行此操作时,JSons(1)(“id”)
我得到了值。不知何故,我得到了这些值
Set JSons = jsonObj("tournaments")
For Each tournament In JSons
i=1
For each json in tournament
Cells(a, b) = jsons(i)(json)
b = b + 1
Next
a = a + 1
b = 1
Next
不知怎的,我得到了这些值
Set JSons = jsonObj("tournaments")
For Each tournament In JSons
i=1
For each json in tournament
Cells(a, b) = jsons(i)(json)
b = b + 1
Next
a = a + 1
b = 1
Next
您可以将JSON数据放入数组,如下面的示例代码所示将模块导入VBA项目以进行JSON处理。
选项显式
子测试()
'将源JSON字符串放入“\source.JSON”文件,并另存为ANSI或Unicode
将字符串作为字符串
Dim vJSON作为变量
将状态设置为字符串
Dim aData()
Dim aHeader()
sJSONString=ReadTextFile(ThisWorkbook.Path&“\source.json”,-2)
解析sJSONString、vJSON、sState
vJSON=vJSON(“锦标赛”)
JSON.ToArray vJSON,aData,aHeader
附页(1)
.Cells.Delete
.Cells.WrapText=False
输出阵列。单元格(1,1),A头
Output2DArray.Cells(2,1),aData
.Columns.AutoFit
以
端接头
子输出阵列(oDstRng作为范围,aCells作为变型)
使用oDstRng
.Parent.Select
使用.Resize(1,UBound(aCells)-LBound(aCells)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
子输出2dArray(oDstRng作为范围,aCells作为变体)
使用oDstRng
.Parent.Select
使用。调整大小(_
UBound(aCells,1)-LBound(aCells,1)+1_
UBound(aCells,2)-LBound(aCells,2)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
函数ReadTextFile(sPath为字符串,lFormat为长)为字符串
'lFormat-2-系统默认值,-1-Unicode,0-ASCII
使用CreateObject(“Scripting.FileSystemObject”).OpenTextFile(sPath,1,False,lFormat)
ReadTextFile=“”
如果不是.AtEndOfStream,则ReadTextFile=.ReadAll
.结束
以
端函数
我的输出如下:
您可以将JSON数据放入数组,如下面的示例代码所示将模块导入VBA项目以进行JSON处理。
选项显式
子测试()
'将源JSON字符串放入“\source.JSON”文件,并另存为ANSI或Unicode
将字符串作为字符串
Dim vJSON作为变量
将状态设置为字符串
Dim aData()
Dim aHeader()
sJSONString=ReadTextFile(ThisWorkbook.Path&“\source.json”,-2)
解析sJSONString、vJSON、sState
vJSON=vJSON(“锦标赛”)
JSON.ToArray vJSON,aData,aHeader
附页(1)
.Cells.Delete
.Cells.WrapText=False
输出阵列。单元格(1,1),A头
Output2DArray.Cells(2,1),aData
.Columns.AutoFit
以
端接头
子输出阵列(oDstRng作为范围,aCells作为变型)
使用oDstRng
.Parent.Select
使用.Resize(1,UBound(aCells)-LBound(aCells)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
子输出2dArray(oDstRng作为范围,aCells作为变体)
使用oDstRng
.Parent.Select
使用。调整大小(_
UBound(aCells,1)-LBound(aCells,1)+1_
UBound(aCells,2)-LBound(aCells,2)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
函数ReadTextFile(sPath为字符串,lFormat为长)为字符串
'lFormat-2-系统默认值,-1-Unicode,0-ASCII
使用CreateObject(“Scripting.FileSystemObject”).OpenTextFile(sPath,1,False,lFormat)
ReadTextFile=“”
如果不是.AtEndOfStream,则ReadTextFile=.ReadAll
.结束
以
端函数
我的输出如下:
很抱歉我的问题让人困惑。我希望使用json(1)而不是json(“id”)获取id的值。当我做这个json(1)时,得到的是一个空值。我的json是一个锦标赛字典。首先,您需要了解JSON是一个对象集;json是一个对象。您的json(1)是错误的语法,您需要在括号内传递“key”值。其次,您不能执行OJBEC的json.Count。您可以使用“For Each json In json”或“For i=1 To JSons.Count”。您只能计算集合或setbut@Nexus,我是否已经在JSons中的每个json的
中传递了它?这是我的解释,JSons是一个锦标赛列表,对于每个锦标赛(json),我想输出值id,所以我使用json(1),因为它在第一项中。然后迭代它以获得锦标赛中的所有值。你认为我应该如何解决这个问题?没有使用“id”或任何字符串而不是整数?很抱歉我的问题让人困惑。我希望使用json(1)而不是json(“id”)获取id的值。当我做这个json(1)时,得到的是一个空值。我的json是一个锦标赛字典。首先,您需要了解JSON是一个对象集;json是一个对象。您的json(1)是错误的语法,您需要在括号内传递“key”值。其次,您不能执行OJBEC的json.Count。您可以使用“For Each json In json”或“For i=1 To JSons.Count”。您只能计算集合或setbut@Nexus,我是否已经在JSons中的每个json的中传递了它?这是我的解释,JSons是一个锦标赛列表,对于每个锦标赛(json),我想输出值id,所以我使用json(1),因为它在第一项中。然后迭代它以获得锦标赛中的所有值。你认为我应该如何解决这个问题?没有使用“id”或任何字符串而不是整数?我这样做了,它仍然获取一个空值。D:我用这些方法得到了值。我这样做了,但它仍然得到一个空值。D