在Swift 3中获取JSON元素

乔比

如果这是一个简单的问题,请原谅,但我被困住了。我试图阅读所有可以自己解决的内容。

我正在尝试从JSON数据中提取URL,我可以很好地获取JSON数据,并且可以将其打印到控制台,但是我无法解决如何访问音频文件的URL。

这是我用来获取JSON的代码:

 let session = URLSession.shared
    _ = session.dataTask(with: request, completionHandler: { data, response, error in
        if let response = response,
            let data = data,
            let jsonData = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) {

            if let dictionary = jsonData as? [String: Any] {
                if let prounce = dictionary["pronunciations"] as? [String: Any]{
                    if let audioPath = prounce["audioFile"] as? String {
                        print(audioPath)
                    }

                }
            }

            print(response)
            print(jsonData)
        } else {
            print(error)
            print(NSString.init(data: data!, encoding: String.Encoding.utf8.rawValue))
        }
    }).resume()

我得到的输出是:

metadata =     {
    provider = "Oxford University Press";
};
results =     (
            {
        id = maladroit;
        language = en;
        lexicalEntries =             (
                            {
                entries =                     (
                                            {
                        etymologies =                             (
                            "late 17th century: French"
                        );
                        grammaticalFeatures =                             (
                                                            {
                                text = Positive;
                                type = Degree;
                            }
                        );
                        senses =                             (
                                                            {
                                definitions =                                     (
                                    "inefficient or inept; clumsy:"
                                );
                                examples =                                     (
                                                                            {
                                        text = "both men are unhappy about the maladroit way the matter has been handled";
                                    }
                                );
                                id = "m_en_gb0494140.001";
                            }
                        );
                    }
                );
                language = en;
                lexicalCategory = Adjective;
                pronunciations =                     (
                                            {
                        audioFile = "http://audio.oxforddictionaries.com/en/mp3/maladroit_gb_1.mp3";
                        dialects =                             (
                            "British English"
                        );
                        phoneticNotation = IPA;
                        phoneticSpelling = "\U02ccmal\U0259\U02c8dr\U0254\U026at";
                    }
                );
                text = maladroit;
            }
        );
        type = headword;
        word = maladroit;
    }
);

}

我想获取audioFile发音中调用的URL 任何帮助深表感谢。

OOPer

如果我的猜测是正确的,{则上面显示的输出在输出顶部缺少开括号

(我还假设输出是从您获得的print(jsonData)。)

jsonData的字典包含两个值:

  • “元数据”的字典值
  • “结果”的数组值

因此,您不能直接从jsonData(或dictionary检索“发音”的值

您可能需要:

  • 从中检索“结果”的值jsonData,它是一个数组
  • 从“结果”中选择一个元素,这是一个字典
  • 从结果中检索“ lexicalEntries”的值,它是一个数组
  • 从“ lexicalEntries”中选择一个元素,这是一个字典
  • 从lexicalEntry检索“ pronunciations”的值,它是一个数组
  • 从“发音”中选择一个元素,这是一个字典

在这里,您可以访问每个发音词典中的值。在代码中,您需要执行以下操作:

if
    let dictionary = jsonData as? [String: Any],
    let results = dictionary["results"] as? [[String: Any]],
    //You need to choose one from "results"
    !results.isEmpty, case let result = results[0],
    let lexicalEntries = result["lexicalEntries"] as? [[String: Any]],
    //You need to choose one from "lexicalEntries"
    !lexicalEntries.isEmpty, case let lexicalEntry = lexicalEntries[0],
    let pronunciations = lexicalEntry["pronunciations"] as? [[String: Any]],
    //You need to choose one from "lexicalEntries"
    !pronunciations.isEmpty, case let pronunciation = pronunciations[0]
{
    //Here you can use `pronunciation` as a Dictionary containing "audioFile" and some others...
    if let audioPath = pronunciation["audioFile"] as? String {
        print(audioPath)
    }
}

如果您始终对数组使用第一个元素,则可以使用let result = results.first代替!results.isEmpty, case let result = results[0]。其他两行也从此开始!...isEmpty, case let...。)

您需要逐步从最外层元素中挖掘目标元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

Swift:从元组中获取元素

来自分类Dev

在Swift中从数组中获取随机元素

来自分类Dev

Swift从数组中获取x个元素

来自分类Dev

Swift 3中的JSON解析

来自分类Dev

获取JSON并在Swift中解析?

来自分类Dev

在Swift 3中从UUID获取数据

来自分类Dev

在Swift 3中,如何从Data获取UnsafeRawPointer?

来自分类Dev

从Swift 3中的周号获取日期

来自分类Dev

在Swift 3中获取当前日期?

来自分类Dev

在Swift 3中获取地图上的路线

来自分类Dev

如何从Swift 2.2中的Set中获取元素

来自分类Dev

如何从Swift中的集合中获取随机元素?

来自分类Dev

在Swift中从数组中获取多个元素的更快方法?

来自分类Dev

如何在Swift中获取2数组的公共元素列表?

来自分类Dev

Swift:从元组数组中获取元素数组

来自分类Dev

在Swift 3中正确解析JSON

来自分类Dev

检查3D数组中是否存在元素Swift

来自分类Dev

在Swift 3中排序时的Nil元素

来自分类Dev

无法从JSON Swift获取数据

来自分类Dev

如何在Swift 3中获取通知授权状态?

来自分类Dev

如何在Swift3中获取UIWebView的“用户代理”

来自分类Dev

Swift 3:在NSAttributedString的子字符串中获取属性

来自分类Dev

在Swift 3中使用CGPoint从图像获取像素颜色

来自分类Dev

在便捷初始化Swift 3中获取类名

来自分类Dev

如何在Swift 3中获取当前队列名称

来自分类Dev

Swift 3-从图库中获取所有照片

来自分类Dev

如何在Swift 3中从NSNotification获取userinfo

来自分类Dev

如何在Swift 3中获取当前日期?

来自分类Dev

如何从推送通知响应中获取数据Swift 3 / iOS

TOP 榜单

热门标签

归档