我已经在这几天里自杀了,我无法弄明白。我绝不是程序员,这是我第一次尝试使用JSON。
我有一个GUI,我在VB.NET中编写,它收集脚本的信息。我正在使用JSON.NET。我将它捕获输入到GUI中的数据并将其作为JSON文件导出,但我现在需要读取JSON文件并将数据放回GUI中的功能。
我正在阅读数据文件的内容,如下所示:
Dim Json As String = File.ReadAllText(fileDlg.FileName)
Dim data As JObject = JObject.Parse(Json)
然后浏览文件的每个元素,如下所示:
AD_DomainNameTB.Text = data.SelectToken("ActiveDirectory.DomainName")
AD_FQDNTB.Text = data.SelectToken("ActiveDirectory.FQDN")
AD_DomainControllerTB.Text = data.SelectToken("ActiveDirectory.DomainController")
AD_SVCUsernameTB.Text = data.SelectToken("ActiveDirectory.SVCUsername")
AD_SVCPasswordTB.Text = data.SelectToken("ActiveDirectory.SVCPassword")
AD_BaseDNTB.Text = data.SelectToken("ActiveDirectory.BaseDN")
现在,我需要遍历一系列站点和站点详细信息,并将其输入到GUI上的datagridview中。我知道我可以为每个项目做下一个循环,但我不知道如何识别数组中的项目数。
JSON数据如下所示:
{
"ActiveDirectory": {
"DomainName": "CORP",
"FQDN": "corp.company.local",
"DomainController": "DC01",
"SVCUsername": "SVC_AD",
"SVCPassword": "SuperPass1",
"BaseDN": "OU=Active,DC=CORP,DC=Ccompany,DC=Local",
"CreateOUs": true,
"CreateGPOs": true,
"Sites": [
{
"Site": "Prod",
"HSA": "True",
"HSD": "True",
"HVD": null
},
{
"Site": "Test",
"HSA": "True",
"HSD": null,
"HVD": "True"
}
]
}
}
我已经非常广泛地查看了该网站上的文档,但我无法找到我正在寻找的内容。我已尝试将其读入数据集,例如https://www.newtonsoft.com/json/help/html/DeserializeDataSet.htm,并且我尝试创建类似Deserialize json array in vb.net的类,但这对我没有意义。它超越了我的头脑。
非常感谢任何帮助。请理解,就像我说的那样,这对我来说是非常新的,所以我需要详细信息(不要以为我知道任何事情......因为我不会!!)
答案 0 :(得分:0)
ActiveDirectory.Sites
节点的类型为JArray
,其属性为Count
。
你可以像这样迭代这些网站:
Dim Sites As JArray = data.SelectToken("ActiveDirectory.Sites")
For I = 0 To Sites.Count - 1
Dim Site = Sites(I)
' use `Site` and `I` in this loop body
Next
但如果您不关心索引,则应使用For Each
循环:
Dim Sites As JArray = data.SelectToken("ActiveDirectory.Sites")
For Each Site In Sites
' use `Site` in this loop body
Next
JObject
还允许您使用以下property lookup语法访问属性:
Dim ActiveDirectory = data("ActiveDirectory")
Dim Sites = ActiveDirectory("Sites")
Dim SiteCount = Sites.Count
你可以写另一种方式:
For Each Site In data("ActiveDirectory")("Sites")
' use `Site` in this loop body
Next
答案 1 :(得分:0)
根据建议,我已经按照我的需要获取了代码。发布以下完整的块:
Dim Json As String = File.ReadAllText(fileDlg.FileName)
Dim data As JObject = JObject.Parse(Json)
Dim site
Dim SiteName
Dim HSA
Dim HSD
Dim HVD
AD_DomainNameTB.Text = data.SelectToken("ActiveDirectory.DomainName")
AD_FQDNTB.Text = data.SelectToken("ActiveDirectory.FQDN")
AD_DomainControllerTB.Text = data.SelectToken("ActiveDirectory.DomainController")
AD_SVCUsernameTB.Text = data.SelectToken("ActiveDirectory.SVCUsername")
AD_SVCPasswordTB.Text = data.SelectToken("ActiveDirectory.SVBPassword")
AD_BaseDNTB.Text = data.SelectToken("ActiveDirectory.BaseDN")
AD_CreateOUsCB.Checked = data.SelectToken("ActiveDirectory.CreateOUs")
AD_CreateGPOCB.Checked = data.SelectToken("ActiveDirectory.CreateGPOs")
Dim Sites As JArray = data.SelectToken("ActiveDirectory.Sites")
For Each site In Sites
SiteName = site.item("Site").ToString()
HSA = site.item("HSA").ToString()
HSD = site.item("HSD").ToString()
HVD = site.item("HVD").ToString()
If HSA = "" Then
HSA = False
End If
If HSD = "" Then
HSD = False
End If
If HVD = "" Then
HVD = False
End If
AD_SitesDatagrid.Rows.Add({SiteName, HSA, HSD, HVD})
Next
现在,可能有更好,更有效的方式来遍历数组中的数据,但这很有效。