iOS中将plist文件中的内容转化成json数据

本文介绍了如何在iOS中将包含省市信息的plist文件转换为json数据。通过解析plist为模型对象数组,再利用NSJSONSerialization进行序列化,生成json字符串。过程中注意将模型对象转换为字典以适应json格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天在项目中有一个需求是,需要将省市对应的plist文件转换成json文件给web端使用。那么其实做这个的需求真的很简单,需要明确两点就可以了。
1.将plist文件中对应的省市解析成数组或者是字典就可以了;
2.将对应的数组或者是字典用json的序列化器序列换成json字符串就可以了。

(1)那么首先第一步就不需要详细的说明了,直接上代码。都是一些垃圾代码

- (instancetype)initWithDict:(NSDictionary *)dict{
    if (self= [super init]) {
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}

+ (instancetype)provinceWithDict:(NSDictionary *)dict{
    return [[self alloc] initWithDict:dict];
}

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{}

+ (NSArray *)provincesAndCities{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"02cities.plist" ofType:nil];
    NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
    NSMutableArray *provinces = [NSMutableArray array];
    for (NSDictionary *dict in dictArray){
        CTProvince *province = [self provinceWithDict:dict];
        [provinces addObject:province];
    }
    return provinces;
}

第一步就完成了,这样就生成了一个省市对应的模型对象数组了。
现在就可以使用 NSJSONSerialization 来将数组序列化成json字符串就可以啦。
但是这里有一个需要注意的地方就是我们这个数组中装的都是CTProvince模型对象,所以是不能直接转成json字符串的,那么既然这样的话,就直接搞成一个字典更好了。这样有一个键值对来互应省份和城市了。

NSMutableArray *array = [NSMutableArray array];
[self.cities enumerateObjectsUsingBlock:^(CTProvince *obj, NSUInteger idx, BOOL * _Nonnull stop) {
         NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        [dic setObject:obj.name forKey:@"name"];
        [dic setObject:obj.cities forKey:@"cities"];
        [array addObject:dic];
    }];
NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// 写再桌面上去喽
[jsonString writeToFile:@"/Users/ctrip/Desktop/jsonString.json" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",jsonString);

最后打印出来的结果如下:
[
{
“province” : “福建”,
“cities” : [
“福州”,
“龙岩”,
“南平”,
“宁德”,
“莆田”,
“泉州”,
“三明”,
“厦门”,
“永安”,
“漳州”
]
},
{
“province” : “山东”,
“cities” : [
“济南”,
“滨州”,
“德州”,
“东营”,
“肥城”,
“海阳”,
“菏泽”,
“济宁”,
“莱芜”,
“莱阳”,
“聊城”,
“临沂”,
“平度”,
“青岛”,
“青州”,
“日照”,
“泰安”,
“威海”,
“潍坊”,
“烟台”,
“枣庄”,
“章丘”,
“淄博”
]
},
下面的就不复制了
……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值