特定の並べ替え順序に従ってコード化可能なカスタムオブジェクトをすばやく並べ替える方法。私は迅速なコード化可能なプロトコルを使用しています。
{
"data": {
"team": [
{
"name": "XYZ",
"designation": "Managing director - South Asia"
},
{
"name": "XYZ",
"designation": "Managing director - South Asia"
}
],
"recruiterName": "Lorium Ipsem text",
"respondsQuickly": "1"
},
"metaData": {
"sortOrder": [
"respondsQuickly",
"recruiterName",
"team"
]
}
}
ここでは、sortOrderオブジェクトに従ってデータオブジェクトを並べ替える必要があります。これは現在Modelオブジェクトです
struct Welcome: Codable {
let data: DataClass?
let metaData: MetaData?
}
struct JDDataClass: Codable {
let team: [Team]?
let recruiterName, respondsQuickly: String?
}
struct Team: Codable {
let name, designation: String?
}
struct JDMetaData: Codable {
let sortOrder: [String]?
}
モデルとしてもオールキーを探すことはできません。Codabaleプロトコルのカスタムオブジェクトとして、JSONや辞書ではなくなりました。
必要な出力:
let myArray = [
{"respondsQuickly": "1"},
{"recruiterName": "Lorium Ipsem text"},
{"team": [
{
"name": "XYZ",
"designation": "Managing director - South Asia"
},
{
"name": "XYZ",
"designation": "Managing director - South Asia"
}
]
}
]
これは実用的な遊び場コードです。確認できます。これがお役に立てば幸いです。arrResultはあなたの答えを保持しています。
struct Welcome: Codable {
let data: JDDataClass?
let metaData: JDMetaData?
}
struct JDDataClass: Codable {
let team: [Team]?
let recruiterName, respondsQuickly: String?
}
struct Team: Codable {
let name, designation: String?
}
struct JDMetaData: Codable {
let sortOrder: [String]?
}
let multiLineString = """
{
"data": {
"team": [
{
"name": "XYZ",
"designation": "Managing director - South Asia"
},
{
"name": "XYZ",
"designation": "Managing director - South Asia"
}
],
"recruiterName": "Lorium Ipsem text",
"respondsQuickly": "1"
},
"metaData": {
"sortOrder": [
"respondsQuickly",
"recruiterName",
"team"
]
}
}
"""
extension Encodable {
subscript(key: String) -> Any? {
return dictionary[key]
}
var dictionary: [String: Any] {
return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self))) as? [String: Any] ?? [:]
}
}
let decoder = JSONDecoder()
do {
if let data = multiLineString.data(using: String.Encoding.utf8, allowLossyConversion: false){
let json = try decoder.decode(Welcome.self, from: data)
var arrResult = [[String : Any]]()
if let sortOrder = json.metaData?.sortOrder {
for item in sortOrder {
if let data = json.data {
if let obj = data[item] {
arrResult.append([item: obj])
}
}
}
print(arrResult)
}
}
} catch {
print(error)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加