如何将此 json 保存为以下格式的 Plist?

Posted

技术标签:

【中文标题】如何将此 json 保存为以下格式的 Plist?【英文标题】:How do i save this json as Plist in following format? 【发布时间】:2013-12-15 20:44:26 【问题描述】:

嗨,我有一个类似以下结构的 JSON


   "taxi":[
      
         "id":"173",
         "taxiName":"texi cabs",
         "taxiDescription":"test desc",
         "contactNumber":[
            
               "Number":"vodafoen,4686565635"
            
         ]
      ,
      
         "id":"172",
         "taxiName":"Blue Moon",
         "taxiDescription":"test desc",
         "contactNumber":[
            
               "Number":"vodafone,45686532"
            
         ]
      ,
      
         "id":"174",
         "taxiName":"yellow cabs",
         "taxiDescription":"test",
         "contactNumber":[
            
               "Number":"airvoice,657865"
            ,
            
               "Number":"simmens,643437547457"
            ,
            
               "Number":"tescom,96831635365"
            
         ]
      
   ]

Link

从此我试图将每个元素的“contactNumber”保存到一个新的 plist 中。请帮帮我。

所以最终的 plist 看起来像 所有这三个元素的联系人列表

我试过了

   paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *taxiPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"taxicontactlist.plist"];
    NSMutableArray *newList=[[NSMutableArray alloc]init];
    taxiContactRoot=[[NSDictionary alloc]initWithContentsOfFile:path];
    taxiContactNewArray=taxiContactRoot[@"taxi"];
    taxiContact=[taxiContactNewArray valueForKey:@"contactNumber"] ;
    NSArray *s=[[NSArray alloc]init];
    s=[taxiContact valueForKey:@"Number"];
    //taxiContact=[taxiContact valueForKey:@"Number"];
    NSString *str;
    for(int i=0;i<[taxiContact count];i++)
        str=[s objectAtIndex:i];
        [newList addObject:str];
        str=@"";
    
    NSLog(@"%@",newList);
   [newList writeToFile:taxiPath atomically:YES];

但结果是

【问题讨论】:

你试过什么代码? 【参考方案1】:

将 JSON 读入 NSDictionary (NSJSONSerialization)。然后获取taxiNSArray。然后获取联系人:

NSArray *contactNumbers = [taxiArray valueForKey:@"contactNumber"];

保存此数组以生成 plist(在磁盘上)。


根据您想要提取联系人(及其子信息)的方式,您可能希望使用关键路径和collection operators(例如@unionOfArrays)来查看。

【讨论】:

您是否真的有任何 JSON,或者您的数据是否高于 NSDictionary 的日志? 我有 json ,检查链接 所以您是从磁盘上的 plist 加载进行测试? 我从链接加载,并尝试将其保存为良好结构的 plist。 我之前没试过2关,但是试试NSArray *numbers = [taxiContactNewArray valueForKeyPath:@"@unionOfArrays.contactNumber.@unionOfArrays.Number"];

以上是关于如何将此 json 保存为以下格式的 Plist?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 .plist 文件直接解析为 Swift 中的对象?

如何将此json数组保存到MYSQL数据库

如何将此 JSON 格式转换为模型类并使用改造将响应转换为列表

如何将此嵌套的 JSON 以柱状形式转换为 Pandas 数据框

核心数据 - 将实体保存为 pList / 字典

如何将自定义数组保存/重新加载到 plist