温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Accessing nested JSON array
arrays c# json serialization

c# - 访问嵌套的JSON数组

发布于 2020-03-30 21:51:14

我有以下JSON:

{
 "reviews": [
  {
   "reviewId": "123",
   "authorName": "author",
   "comments": [
    {
     "userComment": {
      "text": "text",
      "lastModified": {
       "seconds": "1580461776",
       "nanos": 1
      },
      "starRating": 5,
      "reviewerLanguage": "GB",
      "appVersionCode": "",
      "appVersionName": "",
      "thumbsUpCount": 0,
      "thumbsDownCount": 0
     }
    }
   ]
  }
 ]
}

由此,我想要访问的是starRating(但有可能进行多次审阅),我设法将JSON正确地反序列化为C#对象,并在调试代码时进行了检查。

到目前为止,我有:

var appReview = JsonConvert.DeserializeObject<appData>(appJson);
var reviews = appReview.Reviews;
int reviewCount = reviews.Length;
for (int i = 0; i < reviewCount; i++)
{
    Console.WriteLine(reviews[0].Comments[0].UserComment.StarRating); 
}

但是,我不只是希望此特定评论的星级,因为将来会有更多评论和星级,因此我需要选择JSON中的所有评论并获得星级的平均值?因此,我不确定使用[0]索引访问它们是否正确。希望我已经解释得足够好了-有人可以指出正确的方向吗?

查看更多

提问者
Jordan1993
被浏览
17
haldo 2020-01-31 19:28

如果您愿意使用linq,那么我建议您这样做:

var ratings = appReview.Reviews
                       .SelectMany(r => r.Comments.Select(c => c.UserComment.StarRating));

这应该使您获得评级列表。通过StarRating从中选择进行工作,Comments然后SelectMany将阵列展平为单个阵列。

然后,您可以像这样使用平均值:

var average = ratings.Average();

在线尝试