我目前正在使用GraphQL/Node/Express服务器,它可以从另一个API中检索数据。除了我收到的数据之外,我绝对不能访问其他API。
我的问题是,响应是XML,并且有某些字段应该作为数组返回,但如果数组中只有一个项,则会作为对象(或字典)返回。
This blog post更详细地解释了这个问题。
GraphQL中是否有一种方法可以设计模式,如果它接收到一个定义为数组的属性的对象,它会将该对象放入数组中?
示例
- 当前行为 *
<team>
<employee>
<name>Joe</name>
<surname>Bloggs</surname>
</employee>
<employee>
<name>Jane</name>
<surname>Doe</surname>
</employee>
</team>
上面的XML将转换为JSON如下
{
team:{
employee:[
{
name:'Joe',
surname:'Bloggs'
},
{
name:'Jane',
surname:'Doe'
}
]
}
}
但如果只有一个员工
<team>
<employee>
<name>Joe</name>
<surname>Bloggs</surname>
</employee>
</team>
上面的XML将转换为JSON,如下所示,其中employee
成为对象而不是数组
{
team:{
employee:{
name:'Joe',
surname:'Bloggs'
}
}
}
2条答案
按热度按时间6bc51xsx1#
是的,可以实现,也很容易实现
使用Apollo,您可以定义解析器Map,用于解析类型的所有字段和子字段,以进行查询和变更。
Read about resolvers
在本例中,您可以为
Team
类型上的特定字段employee
编写一个解析器,这将确保返回一个数组。结果将是:
注意:你不必自己实现所有的解析器函数。如果您没有为字段提供解析器函数,Apollo将使用默认的解析器。这通常意味着简单地按原样返回值。
weylhg0b2#
当你调用那个API时,你可以使用“force_list=('employee',),假设你知道哪些字段会抛出这个问题。这将确保它总是被转换为列表,即使一个对象存在。