繁体   English   中英

IOS / Swift / SwiftyJSON:从IBM Watson / Bluemix API解析嵌套的JSON

[英]IOS/Swift/SwiftyJSON: Parse Nested JSON from IBM Watson/Bluemix API

我正在从IBM Watson的音频分析器API接收一些JSON,其格式如下所示。 我想做的是在对象中捕获JSON,并带有主要音调的属性和值。 愤怒:.218厌恶:2.20,等等。 当我分析更多文本时,我想将它们添加到这些对象的数组中。

在这个阶段,我只想使用SwiftyJSON对api进行一些操作,但是语法上却很困惑:

以下代码仅显示为nil:

 let anger = JSON(value)["results"][0]["anger"].array?.map { json in
                    json["anger"].stringValue
                                    }
                print (anger)

希望能获得有关如何实际掌握音调及其价值的指导。...在此先感谢您的任何建议。

JSON看起来像这样:

 {
        "document_tone" =     {
            "tone_categories" =         (
                            {
                    "category_id" = "emotion_tone";
                    "category_name" = "Emotion Tone";
                    tones =                 (
                                            {
                            score = "0.218727";
                            "tone_id" = anger;
                            "tone_name" = Anger;
                        },
                                            {
                            score = "0.210102";
                            "tone_id" = disgust;
                            "tone_name" = Disgust;
                        },
                                            {
                            score = "0.060026";
                            "tone_id" = fear;
                            "tone_name" = Fear;
                        },
                                            {
                            score = "0.076444";
                            "tone_id" = joy;
                            "tone_name" = Joy;
                        },
                                            {
                            score = "0.176849";
                            "tone_id" = sadness;
                            "tone_name" = Sadness;
                        }
                    );
                },
                            {
                    "category_id" = "language_tone";
                    "category_name" = "Language Tone";
                    tones =                 (
                                            {
                            score = 0;
                            "tone_id" = analytical;
                            "tone_name" = Analytical;
                        },
                                            {
                            score = 0;
                            "tone_id" = confident;
                            "tone_name" = Confident;
                        },
                                            {
                            score = 0;
                            "tone_id" = tentative;
                            "tone_name" = Tentative;
                        }
                    );
                },
                            {
                    "category_id" = "social_tone";
                    "category_name" = "Social Tone";
                    tones =                 (
                                            {
                            score = "0.02278";
                            "tone_id" = "openness_big5";
                            "tone_name" = Openness;
                        },
                                            {
                            score = "0.340597";
                            "tone_id" = "conscientiousness_big5";
                            "tone_name" = Conscientiousness;
                        },
                                            {
                            score = "0.541852";
                            "tone_id" = "extraversion_big5";
                            "tone_name" = Extraversion;
                        },
                                            {
                            score = "0.545246";
                            "tone_id" = "agreeableness_big5";
                            "tone_name" = Agreeableness;
                        },
                                            {
                            score = "0.743194";
                            "tone_id" = "emotional_range_big5";
                            "tone_name" = "Emotional Range";
                        }
                    );
                }
            );
        };
    }

您可以使用swift 4和URLSession Codable结构快速轻松地完成此URLSession

这是您问题的快速解决方案。 struct属性映射到您的json树,您可能需要更改结构以匹配要接收的json。 您上面发布的json格式无效,否则我可以正确映射它。

struct Tone: Codable {
    let score: Double
    let tone_id: String
    let tone_name: String
}

struct Category: Codable {
    let category_id: String
    let category_name: String
    let tones: [Tone]
}

struct DocumentTone: Codable {
    let toneCategories: [Category]
}

final class ToneService {
    static func fetchTone(toneUrl: URL, _ completion: @escaping([DocumentTone]) -> Void) {
        URLSession.shared.dataTask(with: toneUrl) { (data, response, error) in
            guard let data = data else { return }
            do {
                let decoder = JSONDecoder()
                // If your json returns a single object, use DocumentTone.self instead of [DocumentTone].self, as well change the completion
                let tone = try decoder.decode([DocumentTone].self, from: data)
                completion(tone)
            } catch let error {
                print(error.localizedDescription)
            }
        }.resume()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM