Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA JSON-获取空值_Json_Vba_Excel - Fatal编程技术网

VBA 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

我这里有一个示例JSON文件

{
    "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