Mac-json数据快速转成plist数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac-json数据快速转成plist数据相关的知识,希望对你有一定的参考价值。
参考技术A 我们自己写demo的时候会需要一些假数据,上一篇 《Mac上青花瓷抓包工具的使用》 已经获取到了数据。那么如何快速的将 json 数据转化为 plist 数据呢?
1.创建一个 .json 类型的文件
点击文本编辑器,什么数据都不添加,
添加后缀 .json ,将 data 改为 data.json ,如下图所示:
这时已经转化为 .json 类型的文件,我们把 data.json 放进 XCode 中,发现 data.json 里的数据已经发生了变化,如下图:
这就是在新建 data.rtf 文件的时候什么数据都不添加的原因,因为添加的数据正确, data.json 文件添加到xcode 中也会发生转换,添加到xcode后,我们将json格式的假数据复制到 data.json 文件中,再次导出 data.json 文件,如下图所示:
2.创建plist文件
3.json 数据转化 plist数据
下面是一些转换指令,可以直接用
json to plist命令:
plist to json命令:
⚠️:如果在终端命令转化过程中,转化报错,极有可能是json数据格式有误,或者plist文件格式有误,比如 json数据如下图所示就会报错,我们需要将数据对齐。
同样的操作plist数据也能很快转化为json数据。
先记录这些,感谢阅读,如有错误,不吝赐教!
如何在 swift 中读取数组和字典的 plist
【中文标题】如何在 swift 中读取数组和字典的 plist【英文标题】:How to read a plist of array and dictionary in swift 【发布时间】:2015-07-02 17:04:18 【问题描述】:我正在关注 Apple 示例项目 TVAnimationsGestures,但将其应用于我自己的项目之一。我需要将数据从 plist 加载到我的类中,但我似乎无法弄清楚如何快速做到这一点。这是 plist 尝试读取的图像。
示例项目使用此方法读取plist
- (NSArray *)plays
if (_plays == nil)
NSURL *url = [[NSBundle mainBundle] URLForResource:@"PlaysAndQuotations" withExtension:@"plist"];
NSArray *playDictionariesArray = [[NSArray alloc ] initWithContentsOfURL:url];
_plays = [NSMutableArray arrayWithCapacity:[playDictionariesArray count]];
for (NSDictionary *playDictionary in playDictionariesArray)
APLPlay *play = [[APLPlay alloc] init];
play.name = playDictionary[@"playName"];
NSArray *quotationDictionaries = playDictionary[@"quotations"];
NSMutableArray *quotations = [NSMutableArray arrayWithCapacity:[quotationDictionaries count]];
for (NSDictionary *quotationDictionary in quotationDictionaries)
APLQuotation *quotation = [[APLQuotation alloc] init];
[quotation setValuesForKeysWithDictionary:quotationDictionary];
[quotations addObject:quotation];
play.quotations = quotations;
[_plays addObject:play];
return _plays;
我环顾四周并设法让大部分内容不显示任何错误,但我认为它没有正确完成,因为有很多演员表。这是我已经走了多远:
func loadFoodCategoryData() ->[Any]
// foodCategoryData is declared outside the function
if foodCategoryData == nil
var url = NSBundle.mainBundle().URLForResource("Items", withExtension: "plist")!
var categoryDictionaryArray = NSArray(contentsOfURL: url) as! [[String:AnyObject!]]
foodCategoryData = Array()
for foodDictionary:Dictionary in categoryDictionaryArray
var foodCat = FoodCategories()
foodCat.foodCategoryName = foodDictionary["categoryName"] as! String
var foodItemsDict = foodDictionary["items"]
var foodItemsArray = [AnyObject]()
for foodItems in foodDictionary
var foodItem:FoodItems = FoodItems()
foodItem.setValuesForKeysWithDictionary(foodItems as! Dictionary)
foodItemsArray.append(foodItem)
return foodCategoryData
谁有更好更有效的方法来将此 plist 加载到我的类中?
【问题讨论】:
你在函数之外声明foodCategoryData
吗?你声明它是什么?
是的,是函数外的变量。
【参考方案1】:
惰性初始化变量在 Swift 中具有特定的语法。相当于ObjC的代码是(体简化)
lazy var plays : [AnyObject] =
var foodCategoryData = [AnyObject]()
// do things
foodCategoryData.append("something")
return foodCategoryData
()
从 AnyObject 向下转换是一种痛苦但必要的
编辑
您的代码非常接近。试试这个(未经测试)
lazy var foodCategoryData : [AnyObject] =
let url = NSBundle.mainBundle().URLForResource("Items", withExtension: "plist")!
var categoryDictionaryArray = NSArray(contentsOfURL: url) as! [[String:AnyObject!]]
var foodItemsArray = [FoodItems]()
for foodDictionary in categoryDictionaryArray
var foodCat = FoodCategories()
foodCat.foodCategoryName = foodDictionary["categoryName"] as! String
var foodItemsDict = foodDictionary["items"] as! [String:AnyObject]
for foodItems in foodDictionary
var foodItem:FoodItems = FoodItems()
foodItem.setValuesForKeysWithDictionary(foodItems as! Dictionary)
foodItemsArray.append(foodItem)
return foodItemsArray
()
【讨论】:
我理解那部分。我不明白的是如何从我的 plist 中提取数据并将值设置到我的自定义类中。 谢谢,它在大多数情况下都有效。我在“foodItem.setValuesForKeysWithDictionary(foodItems as! Dictionary)”处收到警告,它说“从 (String,implicitlyUnwrappedOptional) 转换为不相关的类型 Dictionary以上是关于Mac-json数据快速转成plist数据的主要内容,如果未能解决你的问题,请参考以下文章
无法创建 Plist 文件。 iOS+NSDictionary+JSON