正在寻找使用Powershell和JSON的一些帮助



我几乎没有编程经验,但我在Powershell上做了一点工作,所以我选择了这个作为我正在进行的一个小项目。我试图从JSON中提取一些信息,到目前为止,我已经能够边走边弄清楚,但结果的格式很奇怪,这让我陷入了循环。以下是JSON结果的一个片段:

"data":  {
"reviews":  [
{
"available_at":  "2021-06-18T12:00:00.000000Z",
"subject_ids":  [
7572,
3428,
759,
732,
712,
718,
731
]
},
{
"available_at":  "2021-06-18T22:00:00.000000Z",
"subject_ids":  [
730,
710,
854,
1029,
2938,
736,
734
]
},
{
"available_at":  "2021-06-19T03:00:00.000000Z",
"subject_ids":  [
3493,
3086,
3091,
2847
]
}
]
}
}

我想做的是得到每组data.reviews.subject_ids的计数。通过使用($summary.data.reviews.subject_ids | Measure-Object).count,我得到了18的结果,这是意料之中的,因为有18个subject_id。不过,我只想知道第一组的7分,我不知道如何从第一盘开始,而不是第二盘、第三盘等等。我该怎么做?

$summary.data.reviews是一个由3个子块(即available_atsubject_ids块(组成的数组。

目前,您正在计算subject_ids属性中所有3个子项的项目数。

如果你只想选择第一个可以使用的:

$summary.data.reviews[0]

请注意,PowerShell中的数组是零索引的,因此第一个索引是[0],第二个是[1],第N个是[N-1]

然后您的代码变为:

($summary.data.reviews[0].subject_ids | Measure-Object).Count
#7

今天,您使用的语法是$summary.data.reviews.subject_ids,它说给我summary.data中所有reviews的所有subject_ids

不过,你想要的项目是评论数组中的第一个成员。我们可以通过使用这样的索引符号$summary.data.reviews[0]来得到,它表示";给我reviews中的第一个项目";。

PowerShell和许多编程语言一样,从0开始计数,所以我们说0是指列表中的第一个。

然后,您可以像以前一样,使用此语法$summary.data.reviews[0].subject_idsdereference您想要的特定字段。

使用要计数的数组的位置。

关于阵列:

您可以使用从位置0开始的索引来引用数组中的元素。将索引号括在括号中。

PS /> $json.data.reviews
available_at                subject_ids              
------------                -----------              
2021-06-18T12:00:00.000000Z {7572, 3428, 759, 732...}
2021-06-18T22:00:00.000000Z {730, 710, 854, 1029...} 
2021-06-19T03:00:00.000000Z {3493, 3086, 3091, 2847} 
PS /> $json.data.reviews.GetType()
IsPublic IsSerial Name       BaseType
-------- -------- ----       --------
True     True     Object[]   System.Array
PS /> $json.data.reviews
available_at                subject_ids              
------------                -----------              
2021-06-18T12:00:00.000000Z {7572, 3428, 759, 732...}
2021-06-18T22:00:00.000000Z {730, 710, 854, 1029...} 
2021-06-19T03:00:00.000000Z {3493, 3086, 3091, 2847} 
PS /> $json.data.reviews[0]
available_at                subject_ids              
------------                -----------              
2021-06-18T12:00:00.000000Z {7572, 3428, 759, 732...}
PS /> $json.data.reviews[0].subject_ids.Count
7

如果你想迭代所有元素并获得它们的计数,你可以这样做:

$i=1;foreach($object in $json.data.reviews)
{
"- Group $i has {0}" -f $object.subject_ids.count
$i++
}

哪个收益率:

- Group 1 has 7
- Group 2 has 7
- Group 3 has 4

最新更新