国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS處理json,序列化和反序列化

這篇具有很好參考價(jià)值的文章主要介紹了iOS處理json,序列化和反序列化。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Mantle 是一個(gè)開源的 Objective-C 框架,用于在 iOS 和 macOS 應(yīng)用程序中實(shí)現(xiàn)模型層的序列化和反序列化。它提供了一種簡單而強(qiáng)大的方式來將 JSON數(shù)據(jù)格式轉(zhuǎn)換為自定義的數(shù)據(jù)模型對象,以及將數(shù)據(jù)模型對象轉(zhuǎn)換為字典或 JSON 格式。

Mantle具有如下特點(diǎn)

自動(dòng)映射

Mantle自動(dòng)將 JSON 數(shù)據(jù)與模型屬性進(jìn)行映射,無需手動(dòng)解析和賦值。

支持嵌套

Mantle 支持在模型中嵌套其他模型對象。

支持集合

Mantle 支持?jǐn)?shù)組和字典等集合類型。你可以將集合類型的屬性映射到 JSON 數(shù)組或字典,并在Model中進(jìn)行使用

屬性轉(zhuǎn)換

Mantle 允許你自定義屬性值的轉(zhuǎn)換。你可以定義自定義的屬性轉(zhuǎn)換方法,將屬性的類型轉(zhuǎn)換為其他類型,或者根據(jù)需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,以適應(yīng)模型和外部數(shù)據(jù)的差異。

安裝

在CocoaPods的Podfile中添加

pod 'Mantle', '~> 2.2.0'

執(zhí)行pod install,安裝成功后,工程可以使用Mantle了。

使用Mantle解析JSON

現(xiàn)有json文件

{
  "name": "John Doe",
  "age": 25,
  "address": {
    "city": "New York",
    "country": "USA"
  },
  "interests": ["reading", "traveling", "photography"]
}

為了從json轉(zhuǎn)換為Objective-C的Model,我們可以寫出Model類

#import <Mantle/Mantle.h>
//嵌套的類型
@interface AddressModel : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy) NSString *city;
@property (nonatomic, copy) NSString *country;
@end

@implementation AddressModel
//映射字典,屬性city對應(yīng)JSON里面的city,country對應(yīng)JSON里面的country
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"city": @"city",
        @"country": @"country"
    };
}
@end

@interface UserModel : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, strong) AddressModel *address;
@property (nonatomic, strong) NSArray<NSString *> *interests;
@end

@implementation UserModel
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"name": @"name",
        @"age": @"age",
        @"address": @"address",
        @"interests": @"interests"
    };
}
//對于嵌套類型,需要添加JSONTransformer
+ (NSValueTransformer *)addressJSONTransformer {
    return [MTLJSONAdapter dictionaryTransformerWithModelClass:AddressModel.class];
}
//對于集合類型,需要添加JSONTransformer 
+ (NSValueTransformer *)interestsJSONTransformer {
    return [MTLJSONAdapter arrayTransformerWithModelClass:NSString.class];
}
@end

上面這個(gè)例子演示了Mantle的屬性轉(zhuǎn)換,嵌套類型,集合類型的使用方法,需要注意的是每個(gè)Model都需要繼承自MTLModel類,并且實(shí)現(xiàn)MTLJSONSerializing協(xié)議。

如果需要做類型轉(zhuǎn)化,比如string類型轉(zhuǎn)換為Date類型,可以使用NSValueTransformer來實(shí)現(xiàn),這個(gè)時(shí)候需要在自定義的Model添加dateValueTransformer方法,運(yùn)行的時(shí)候會自動(dòng)調(diào)用dateValueTransformer方法完成類型轉(zhuǎn)換。

+ (NSValueTransformer *)dateValueTransformer {
    return [MTLValueTransformer transformerUsingForwardBlock:^id(id value, BOOL *success, NSError *__autoreleasing *error) {
        if ([value isKindOfClass:NSDate.class]) {
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyy-MM-dd";
            return [formatter stringFromDate:value];
        }
        return nil;
    } reverseBlock:^id(id value, BOOL *success, NSError *__autoreleasing *error) {
        if ([value isKindOfClass:NSString.class]) {
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyy-MM-dd";
            return [formatter dateFromString:value];
        }
        return nil;
    }];
}

完成Model類的JSON轉(zhuǎn)換規(guī)則后,我們只需要調(diào)用modelOfClass方法即可把JSON轉(zhuǎn)化為Model類,使用起來是很簡單的。

UserModel *user = [MTLJSONAdapter modelOfClass:UserModel.class fromJSONDictionary:json error:&error];

使用Mantle把Model轉(zhuǎn)換為JSON

現(xiàn)有Model定義如下

// 創(chuàng)建模型對象
UserModel *person = [[UserModel alloc] init];
person.name = @"John";
person.age = 20;
person.birthDate = [NSDate date];

如果要轉(zhuǎn)換為JSON,只需要調(diào)用JSONDictionaryFromModel方法文章來源地址http://www.zghlxwxcb.cn/news/detail-503004.html

// 進(jìn)行序列化
NSDictionary *jsonDictionary = [MTLJSONAdapter JSONDictionaryFromModel:person];

到了這里,關(guān)于iOS處理json,序列化和反序列化的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【探索Linux】P.30(序列化和反序列化 | JSON序列化庫 [ C++ ] )

    【探索Linux】P.30(序列化和反序列化 | JSON序列化庫 [ C++ ] )

    當(dāng)談到網(wǎng)絡(luò)編程時(shí),序列化和反序列化是非常重要的概念。在上一篇文章中,我們已經(jīng)了解了在Linux環(huán)境下實(shí)現(xiàn)簡單的TCP網(wǎng)絡(luò)程序的基礎(chǔ)知識。本文將繼續(xù)探討序列化和反序列化,這些概念對于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)以及跨網(wǎng)絡(luò)通信至關(guān)重要。通過深入了解序列化和反序列化,我

    2024年04月08日
    瀏覽(33)
  • Spring Boot 中使用 ObjectMapper 進(jìn)行 JSON 序列化和反序列化

    在 Java 中,可以使用各種 JSON 序列化和反序列化工具將 Java 對象轉(zhuǎn)換為 JSON 字符串或者將 JSON 字符串轉(zhuǎn)換為 Java 對象。其中,Jackson 庫是比較常用的 JSON 序列化和反序列化工具之一,它提供了 ObjectMapper 類,用于將 Java 對象轉(zhuǎn)換為 JSON 字符串,或者將 JSON 字符串轉(zhuǎn)換為 Java 對象

    2024年02月14日
    瀏覽(20)
  • C#: Json序列化和反序列化,集合為什么多出來一些元素?

    C#: Json序列化和反序列化,集合為什么多出來一些元素?

    如下面的例子,很容易看出問題: 如果類本身的無參構(gòu)造函數(shù),?就添加了一些元素,序列化,再反序列化,會導(dǎo)致元素增加。 如果要避免,必須添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    瀏覽(19)
  • cJSON(C語言JSON)庫(適用于嵌入式序列化和反序列化)

    cJSON(C語言JSON)庫(適用于嵌入式序列化和反序列化)

    JSON與序列化和反序列化 JSON (JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,它以易于閱讀和編寫的文本形式表示結(jié)構(gòu)化數(shù)據(jù)。JSON 格式廣泛用于將數(shù)據(jù)從一個(gè)應(yīng)用程序傳輸?shù)搅硪粋€(gè)應(yīng)用程序,特別是在Web應(yīng)用程序中,因?yàn)樗cJavaScript兼容,容易在客戶端和服務(wù)器之間進(jìn)

    2024年02月04日
    瀏覽(43)
  • 又一個(gè)難題:Java 序列化和反序列化為什么要實(shí)現(xiàn) Serializable 接口?

    作者:椰子Tyshawn 來源:https://blog.csdn.net/litianxiang_kaola 最近公司的在做服務(wù)化, 需要把所有model包里的類都實(shí)現(xiàn)Serializable接口, 同時(shí)還要顯示指定serialVersionUID的值. 聽到這個(gè)需求, 我腦海里就突然出現(xiàn)了好幾個(gè)問題, 比如說: 序列化和反序列化是什么? 實(shí)現(xiàn)序列化和反序列化為什

    2024年02月08日
    瀏覽(19)
  • 【Linux】序列化和反序列化

    【Linux】序列化和反序列化

    在網(wǎng)絡(luò)編程中,直接使用 結(jié)構(gòu)體 進(jìn)行數(shù)據(jù)傳輸會出錯(cuò),因?yàn)?本質(zhì)上socket無法傳輸結(jié)構(gòu)體 ,我們只有將結(jié)構(gòu)體裝換為字節(jié)數(shù)組,或者是字符串格式來傳輸,然后對端主機(jī)收到了數(shù)據(jù),再將其轉(zhuǎn)化為結(jié)構(gòu)體,這就是序列化和反序列化的過程! 序列化 (Serialization)是將對象的狀態(tài)

    2024年02月10日
    瀏覽(19)
  • 什么是序列化和反序列化?

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是兩種常用的數(shù)據(jù)交換格式,用于在不同系統(tǒng)之間傳輸和存儲數(shù)據(jù)。 JSON是一種輕量級的數(shù)據(jù)交換格式,它使用易于理解的鍵值對的形式表示數(shù)據(jù)。JSON數(shù)據(jù)結(jié)構(gòu)簡單明了,易于讀寫和解析,是基于JavaScript的一種常用數(shù)據(jù)

    2024年02月09日
    瀏覽(29)
  • Unity-序列化和反序列化

    序列化是指把對象轉(zhuǎn)換為字節(jié)序列的過程,而反序列化是指把字節(jié)序列恢復(fù)為對象的過程。序列化最主要的用途就是傳遞對象和保存對象。 在Unity中保存和加載、prefab、scene、Inspector窗口、實(shí)例化預(yù)制體等都使用了序列化與反序列化。 1 自定義的具有Serializable特性的非抽象、

    2024年01月24日
    瀏覽(27)
  • Java序列化和反序列化

    目錄 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含義 ?序列化就是內(nèi)存中的對象寫入到IO流中,保存的格式可以是二進(jìn)制或者文本內(nèi)容。反序列化就是IO流還原成對象。 2、用途 (1)傳輸網(wǎng)絡(luò)對象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表對象

    2023年04月25日
    瀏覽(24)
  • Java序列化和反序列化機(jī)制

    在閱讀 ArrayList 源碼的時(shí)候,注意到,其內(nèi)部的成員變量動(dòng)態(tài)數(shù)組 elementData 被Java中的 transient 修飾 transient 意味著Java在序列化時(shí)會跳過該字段(不序列化該字段) 而Java在默認(rèn)情況下會序列化類(實(shí)現(xiàn)了 Java.io.Serializable 接口的類)的所有非瞬態(tài)(未被 transient 修飾

    2024年03月15日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包