Как отобразить данные из формата JSON? - PullRequest
0 голосов
/ 21 сентября 2019

Мне нужен цикл, который может печатать данные в следующей иерархии. Solutionletail -> Groups -> детали запроса. Следующая функция давала мне информацию о Solutiondetail -> детали запроса.Я дал новый и старый формат json вместе с рабочей функцией для старого json.Теперь после добавления сведений о группе я столкнулся с проблемой с циклом.

Предыдущий Json : solutiondetail -> request

{
    "SolutionsDetail": [
        {
            "SolutionId": 658,
            "name": "dk",
            "id": 1568377327000,
            "requestDetails": [
                        {
                            "ReqId": 2331,

                        },

                    ]
        }
    ]
}

GeneartingLandingPadData(nxsolId) {
   for (let index = 0; index < this.json.length; index++) {
      if (this.array[index].SolutionId == nxsolId) {
        this.priceDetails = this.array[index].requestdetails;
             for (let k = 0; k < this.priceDetails.length; k++) {
                    console.log("some",this.priceDetails);
                }

            }
        }
        return false;
    }

Новый Json : solutiondetail-> группы -> детали запроса

 {
        "SolutionsDetail": [
            {
                "SolutionId": 658,
                "name": "dk",
                "id": 1568377327000,
                "groups": [
                    {
                        "GroupId": 1,
                        "requestDetails": [
                            {
                                "ReqId": 2331,

                            },

                        ]
                    }

                ]
            }
        ]
    }

Ответы [ 3 ]

0 голосов
/ 21 сентября 2019

Поскольку вы хотите распечатать данные в консоли, я предполагаю, что вам потребуется целая строка для каждой детали запроса

solutiondetail -> groups -> details запроса

релевантно TS :

  GeneartingLandingPadData(nxsolId) {
    for (let index = 0; index < this.newJson.SolutionsDetail.length; index++) {
      if (this.newJson.SolutionsDetail[index].SolutionId == nxsolId) {
        for (let j = 0; j < this.newJson.SolutionsDetail[index].groups.length; j++) {
          for (let k = 0; k < this.newJson.SolutionsDetail[index].groups[j].requestDetails.length; k++) {

            console.log("solutiondetail :", this.newJson.SolutionsDetail[index].name, " -> Groups:", this.newJson.SolutionsDetail[index].groups[j].GroupId, " -> Request detail:", this.newJson.SolutionsDetail[index].groups[j].requestDetails[k].ReqId);
          }
        }
      }
    }
  }
0 голосов
/ 21 сентября 2019

Если я вас правильно понимаю: вы хотите преобразовать старый JSON в новый.Таким образом, метод map () является лучшим способом преобразования массивов и, таким образом, преобразования вашего JSON.Вот еще одна версия, сделанная с использованием TypeScript, которая позволяет вам избежать глубокого вложения цикла for , где мы берем старый JSON и преобразуем его массив SolutionsDetail.Может быть, это вам тоже поможет.

Рабочий пример: https://stackblitz.com/edit/angular-8ryrvw

Приведенный ниже метод возвращает новый JSON:

  GeneartingLandingPadData(oldJson: any): any {
     return oldJson['SolutionsDetail'].map((sDetail: any) => {
        let groups: Array<any> = [];
        sDetail['requestDetails'].forEach((details: any, index: number) => {
           groups.push({ GroupId: index + 1, requestDetails: [details] });
        });
        delete sDetail['requestDetails'];
        sDetail['groups'] = groups;
        return sDetail;
     });
  }

Старый JSON

  {
     "SolutionsDetail": [
        {
           "SolutionId": 658,
           "name": "dk",
           "id": 1568377327000,
           "requestDetails": [
              {
                 "ReqId": 2331,
              },
           ]
        }
     ]
  }

Новый JSON

  {
     "SolutionsDetail": [
        {
           "SolutionId": 658,
           "name": "dk",
           "id": 1568377327000,
           "groups": [
              {
                 "GroupId": 1,
                 "requestDetails": [
                    {
                       "ReqId": 2331,
                    },
                 ]
              }
           ]
        }
     ]
  }

У меня работает) Удачи.

0 голосов
/ 21 сентября 2019

С ограниченным количеством предоставленной вами информации я не могу воссоздать проблему, чтобы протестировать ее.Но из того, что я понял, я думаю, что изменение вашей функции, как показано ниже, может решить вашу проблему.С новым JSON вы должны сначала получить доступ к массиву groups.Затем перейдите к requestId.Даже если следующий код не совсем работает, надеюсь, вы сможете выяснить это, сначала обращаясь к массиву группы, а затем пытаясь найти идентификатор запроса.

GeneartingLandingPadData(nxsolId) {
       for (let index = 0; index < this.json.length; index++) {
          if (this.array[index].SolutionId == nxsolId) {
            var groupDetails = this.array[index].groups;
                 for (let k = 0; k < groupDetails.length; k++) {
                     var priceDetails = groupDetails[k].requestDetails;
                     for (let j = 0; j < priceDetails.length; j++){
                         console.log("some", priceDetails);
                     }
                 }
            }
        }
        return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...