сократить значение поля graphql - PullRequest
1 голос
/ 22 февраля 2020

Я пытаюсь получить путь к изображению в поле псевдонима, используя graphql, я могу получить вывод, подобный этому:

Вывод:

{
  "data": {
    "leaders": [
      {
        "partyImg": {
          "image": {
            "url": "/uploads/17a5f020cc974679ac52e56a22b74dd6.png"
          }
        }
      },
      {
        "partyImg": {
          "image": {
            "url": "/uploads/70bd673d41654058847e39c14cda5fef.png"
          }
        }
      },
      {
        "partyImg": {
          "image": {
            "url": "/uploads/c54a0ace0bb34da3985c67945b1d0bf0.png"
          }
        }
      }
    ]
  }
}

Когда я использовал следующий код graphql :

Ввод:

query Leaders{
  leaders{
    partyImg: party{image: Image{ url }},
  }
}

Вывод, который я пытаюсь получить:

Ожидаемый вывод:

{
  "data": {
    "leaders": [
      {
        "partyImg": "/uploads/17a5f020cc974679ac52e56a22b74dd6.png"
      },
      {
        "partyImg": "/uploads/70bd673d41654058847e39c14cda5fef.png"
      },
      {
        "partyImg": "/uploads/c54a0ace0bb34da3985c67945b1d0bf0.png"
      }
    ]
  }
}

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

1 Ответ

1 голос
/ 22 февраля 2020

Похоже, схема graphql не позволяет вам получать данные в нужном вам формате. Исходя из вашего входного запроса, я ожидаю, что схема выглядит примерно так:

query {
    leaders: [Leader]
}
type Leader {
    party: Party
}
type Party {
    Image: Image
}
type Image {
    url: String
}

Чтобы получить данные в нужном формате, вам понадобится схема, которая будет выглядеть примерно так:

query {
    leaders: [Leader]
}
type Leader {
    party: Party,
    imageUrl: String
}

Тогда вы можете сделать:

query Leaders {
    leaders {
        partyImg: imageUrl
    }
}

Я предполагаю, что вы не управляете схемой, поэтому вам придется выполнить постобработку. Если вы используете javascript, следующее для вышеприведенного вывода может работать как простое сопоставление.

(function() {
  var output = {
    "data": {
      "leaders": [{
          "partyImg": {
            "image": {
              "url": "/uploads/17a5f020cc974679ac52e56a22b74dd6.png"
            }
          }
        },
        {
          "partyImg": {
            "image": {
              "url": "/uploads/70bd673d41654058847e39c14cda5fef.png"
            }
          }
        },
        {
          "partyImg": {
            "image": {
              "url": "/uploads/c54a0ace0bb34da3985c67945b1d0bf0.png"
            }
          }
        }
      ]
    }
  };

  var transformed = {
    data: {
      leaders: output.data.leaders.map(function flattenUrl(item) {
        return {
          partyImg: item.partyImg.image.url
        };
      })
    }
  }
  document.getElementById('transformedOutput').innerHTML = JSON.stringify(transformed);
}());
<div id="transformedOutput"></div>

Если вы являетесь автором этой схемы graphql, вы можете структурировать ее любым удобным для ваших приложений и / или потребителей способом.

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