Доступ к вложенному массиву JSON - PullRequest
0 голосов
/ 31 января 2020

У меня есть следующее 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); 
}

Однако я не просто хочу звездный рейтинг этого конкретного c обзора, так как в будущем будет больше обзоров и звездных рейтингов, поэтому мне нужно выбрать все отзывы в JSON и получить среднее значение звездного рейтинга? Из-за этого я не уверен, что доступ к ним с индексом [0] правильный. Надеюсь, я объяснил это достаточно хорошо - может кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 31 января 2020

Если вам удобно использовать linq, я бы предложил что-то вроде этого:

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

Это должно дать вам список оценок. Это работает путем выбора StarRating из Comments, а затем SelectMany выравнивает массивы в один массив.

Тогда вы можете использовать получить среднее значение так:

var average = ratings.Average();

Попробуйте онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...