簡體   English   中英

如何在iOS Swift中將對象數組轉換為Json數組或Json字符串?

[英]How to convert object array into Json array or Json string in ios swift?

我有一個數組,其中有一組對象var quiz_anwers_list = [QuizQu]() “ QuizQu”是一個包含2個變量的類

class QuizQu: Decodable {
    var ques_id: String?
    var their_answer: String?
}

現在有

for i in 0...self.quiz_anwers_list.count-1{

            print(self.quiz_anwers_list[i].ques_id ?? "no val in ques id of \(i)")
            print(self.quiz_anwers_list[i].their_answer ?? "no val in their_ans of \(i)")
        }

這些打印的輸出是:

14
correct_answer
15
correct_answer2
16
correct_answer2
17
correct_answer

現在如何將其轉換為JsonArray或JSON String? 我是iOS的新手。

您的類可能應該是一個結構,並且應該符合Encodable而不是Decodable ,如果您打算編碼和解碼,則可以使用涵蓋兩種情況的Codable協議。

完成此操作后,只需使用JSONEncoder將其轉換為JSON數據,然后即可使用String(bytes: Sequence, encoding: String.Encoding)打印它

struct QuizQu: Codable {
    var ques_id: String?
    var their_answer: String?
}

let questions = [
    QuizQu(ques_id: "1", their_answer: "2"),
    QuizQu(ques_id: "2", their_answer: "2"),
    QuizQu(ques_id: "3", their_answer: "1"),
    QuizQu(ques_id: "4", their_answer: "4"),
    QuizQu(ques_id: "5", their_answer: "3")
]

do {
    let encoded = try JSONEncoder().encode(questions)
    print(String(bytes: encoded, encoding: .utf8))
} catch {
    print(error)
}

輸出:

可選( “[{\\” ques_id \\ “:\\” 1 \\” \\ “their_answer \\”:\\ “2 \\”},{\\ “ques_id \\”:\\ “2 \\” \\ “their_answer \\”:\\ “2 \\”},{\\ “ques_id \\”:\\ “3 \\” \\ “their_answer \\”:\\ “1 \\”},{\\ “ques_id \\”:\\ “4 \\” \\ “their_answer \\” :\\ “4 \\”},{\\ “ques_id \\”:\\ “5 \\”,\\ “their_answer \\”:\\ “3 \\”}]“)

注意:輸出的String被轉義,因此反斜杠

你可以做到

    extension Encodable {
      var dictionary: [String: Any]? {
        guard let data = try? JSONEncoder().encode(self) else { return nil }
        return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
      }
}

let struct = QuizQu(ques_id: 1, their_answer: abc)
let jsonObj = struct.dictionary

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM