Apollo iOS 将 JSONArray 转换为 String

Posted

技术标签:

【中文标题】Apollo iOS 将 JSONArray 转换为 String【英文标题】:Apollo iOS convert JSONArray to String 【发布时间】:2019-07-25 09:56:52 【问题描述】:

如果架构中没有对象映射,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))]

【问题讨论】:

【参考方案1】:

我只能通过更改 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 对象转换为字符串。这样,我至少得到了一些数据。

【讨论】:

我也遇到了这个 JSONArray 到字符串的问题,我在我的 JSONStandardTypeConversions 文件中应用了这个更改,但仍然是同样的错误。 couldNotConvert(value: <__NSArrayI 0x281834330> to Swift.String。你能指导一下其他方式吗

以上是关于Apollo iOS 将 JSONArray 转换为 String的主要内容,如果未能解决你的问题,请参考以下文章

将 JSONarray 转换为 ArrayList

将 JSONArray 转换为字符串数组

无法将字符串转换为 JsonArray

将 MongoDB 查询结果转换为 JSONArray

如何使用 Gson 将 JSONArray 转换为 List?

如何将 JSONObjects 转换为 JSONArray?