title: Swift3 JSONSerialization with [String:Any] rather than NSDictionary
body: <p>Say you have a string of json <code>someText</code> and you want to parse it to a dictionary. Previously I have done this...</p>
  
  <pre><code>let jsonResult: NSDictionary =
     try JSONSerialization.jsonObject(
        with: someText.data(using: .utf8)!,
        options: JSONSerialization.ReadingOptions.mutableContainers)
           as! NSDictionary
  </code></pre>
  
  <p>but that's just a crappy <code>NSDictionary</code>.</p>
  
  <p>It would seem that you can indeed do this......</p>
  
  <pre><code>let jsonResult: [String:Any] =
     try JSONSerialization.jsonObject(
        with: someText.data(using: .utf8)!,
        options: JSONSerialization.ReadingOptions.mutableContainers)
           as! [String:Any]
  </code></pre>
  
  <p>so that's now a real Swift dictionary.</p>
  
  <p>Does this work?  Are there drastic efficiency differences, or perhaps other problems?</p>
  
  <p>Confusingly to me, </p>
  
  <pre><code>  open class func jsonObject(with data: Data,
       options opt: JSONSerialization.ReadingOptions = []) throws -&gt; Any
  </code></pre>
  
  <p>the call just returns <code>Any</code> anyways.  So when you cast it to your <code>[String:Any]</code> or indeed <code>NSDictionary</code>, what's the process, what is best?</p>