2017-05-09 132 views
-3

我在swift 3中调用api,并从api中获取JSON字符串格式的响应。如何将该JSON字符串转换为Swift中的Dictionary或Array。此外,该JSON字符串包含更多的数组和字典。来自Swift服务器的JSON响应

我试过使用EVReflection工具。它只是转换字典中的上层JSON对象。嵌套字典和数组仍然是字符串格式。

+1

我建议你使用SwiftyJson转换。这是一个不可思议的图书馆。 –

+0

还有一篇关于苹果的博客文章:https://developer.apple.com/swift/blog/?id=37 –

+0

看看:http://stackoverflow.com/questions/30480672/how- to-convert-a-json-string-to-a-dictionary – carlito

回答

0

尝试这样的事情,反响[字符串:任何]所以你必须转换为任何类型的

DispatchQueue.main.async { 
    do { 
     if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] { 
      let j = json as NSDictionary 
      guard let resp = response as? HTTPURLResponse 
       else { 
        // No response from server 
        return 
      } 

      if resp.statusCode == 200 { 
       // You can put here some callback, this is a data you need 
      } else { 
       // Here is some error 
      } 
     } 
    } catch { 
     // And this is a error from server 
    } 
} 
+0

将类型从Swift'Dictionary'转换为Foundation'NSDictionary'将抛出类型信息。不要这样做。 – vadian

+0

@vadian我同意,但我认为它的目的是质疑这是好的想法。 – miff

+1

建议仅使用Swift本机集合类型 – vadian

0

您会收到jsonData您可以直接尝试JSONSerialization。

如果你收到它作为JSON字符串任何理由,那么你必须是字符串jsonData第一

// Here you have to convert Json String to jsonData 
// if it's not Json String then skip this line 
let jsonData = jsonString.data(using: .utf8) 

// Try to convert it to json object 
do { 
     let json = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String : Any] 
     // now you can try to parse your json 


     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 

或者作为@Jay提到,在使用Swiftyjson

+0

'您必须将该字符串更改为jsonData'否,他们必须首先从服务器获取适当的JSON数据,而不是使用JSON字符串。 ;) – Moritz

+0

我的回答是基于问题将json字符串转换为正确的json对象。将json作为字符串可能有很多原因,您必须手动将其转换回json数据。 –

+0

我没有说你的答案是错的(你的答案唯一的问题是这个内容已经被多次提供)。我说的是,通常,这个JSON字符串是由JSON数据产生的......导致无用的转换。常见错误OP应该注意。 – Moritz