Apollo iOS Swift не преобразует JSONArray в String, если в вашей схеме нет сопоставления объектов. У меня есть запрос, в котором результирующий массив объектов не отображается в schema.json Описание в схеме:
{"name":"stack",
"description":"",
"args":[
],
"type":{
"kind":"LIST",
"name":null,
"ofType":{
"kind":"SCALAR",
"name":"JSON",
"ofType":null
}}}
Полученные данные выглядят так:
"stack":[{
"name":"React",
"version":"",
"category":[ "JavaScript Frameworks"]}]
Сообщение об ошибке, которое я получил,
[Apollo.GraphQLResultError(path: ["userHost", "stack"], underlying: Apollo.JSONDecodingError.couldNotConvert(value: {
category = (
React
);
name = "JavaScript Frameworks";
version = "";
}, to: Swift.String))]





Я мог решить эту проблему, только изменив файл JSONStandardTypeConversions.
Это было:
extension String: JSONDecodable, JSONEncodable {
public init(jsonValue value: JSONValue) throws {
guard let string = value as? String else {
throw JSONDecodingError.couldNotConvert(value: value, to: String.self)
}
self = string
}
public var jsonValue: JSONValue {
return self
}
}
я изменил его на
extension String: JSONDecodable, JSONEncodable {
public init(jsonValue value: JSONValue) throws {
let string = value as? String
if (string == nil) {
do {
let data1 = try JSONSerialization.data(withJSONObject: value, options: JSONSerialization.WritingOptions.prettyPrinted) // first of all convert json to the data
let convertedString = String(data: data1, encoding: String.Encoding.utf8) // the data will be converted to the string
if (convertedString == nil) {
throw JSONDecodingError.couldNotConvert(value: value, to: String.self)
} else {
self = convertedString ?? ""
}
} catch let myJSONError {
print(myJSONError)
throw JSONDecodingError.couldNotConvert(value: value, to: String.self)
}
} else {
self = string ?? ""
}
}
public var jsonValue: JSONValue {
return self
}
}
Если стандартное преобразование в строку не работает, я заставляю объект JSON преобразовываться в строку. Таким образом, я получаю по крайней мере некоторые данные.