我几乎没有编程经验,但我在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_at
和subject_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_ids
来dereference
您想要的特定字段。
使用要计数的数组的位置。
关于阵列:
您可以使用从位置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