在iOS中使用NSString参数迭代NSMutableArray对象后,需要生成一个JSON文档上传到服务器[关闭]

Posted

技术标签:

【中文标题】在iOS中使用NSString参数迭代NSMutableArray对象后,需要生成一个JSON文档上传到服务器[关闭]【英文标题】:Need to generate a JSON document to upload to server after iterating an NSMutableArray of objects with NSString parameters in iOS [closed] 【发布时间】:2012-12-24 22:24:24 【问题描述】:

我有一个包含对象集合的 NSMutableArray,每个对象都有三个 NSString 类型的参数。我需要做的是遍历这个集合,并创建一个包含两个小节的 JSON 文档:一个称为“测试结果”,另一个称为“报告”。 NSMutable 数组中的每个对象都有三个 NSString 参数,其中一个参数称为“testResult”。

如果“testResult”的值为“pass”或“fail”,则该对象需要进入“Test Result”部分。如果参数的值为“na”,则对象进入“报告”部分。 “测试结果”部分应包含三个“元素”:“名称”、“日期”、“测试结果”。 “报告”部分只需包含两个元素:“名称”和“日期”。我的问题不是如何使用 for 循环遍历 NSMutableArray,我的问题是如何遍历 NSMutableArray,并构造一个 JSON 文档,如上所述。

我的代码是这样的:

    //creating beginning of JSON document here

    for (Person *personObject in testResultArray) 

         if (personObject.testResult == @"na") 

             //construct JSON object for "Reports" section
             NSString *jsonString1 = personObject.name;
             NSString *jsonString2 = personObject.date;
NSData *data1 = [jsonString1 dataUsingEncoding:NSUTF8StringEncoding];
NSData *data2 = [jsonString2 dataUsingEncoding:NSUTF8StringEncoding];
NSError * error = nil;
id json1 = [NSJSONSerialization JSONObjectWithData:data1 options:0 error:&error];
id json2 = [NSJSONSerialization JSONObjectWithData:data2 options:0 error:&error];

          
         else 

            //construct JSON object for "Test Results" section
            NSString *jsonString1 = personObject.name;
            NSString *jsonString2 = personObject.date;
            NSString *jsonString3 = personObject.testResult;

NSData *data1 = [jsonString1 dataUsingEncoding:NSUTF8StringEncoding];
NSData *data2 = [jsonString2 dataUsingEncoding:NSUTF8StringEncoding];
NSData *data3 = [jsonString3 dataUsingEncoding:NSUTF8StringEncoding];

NSError * error = nil;
id json1 = [NSJSONSerialization JSONObjectWithData:data1 options:0 error:&error];
id json2 = [NSJSONSerialization JSONObjectWithData:data2 options:0 error:&error];
id json3 = [NSJSONSerialization JSONObjectWithData:data3 options:0 error:&error];

         

    

    //close the JSON document construction, and return JSON document.

【问题讨论】:

这是你使用失传的实际编程艺术的地方。到目前为止,您尝试过什么? 添加到@HotLicks 评论。您似乎已经考虑过要如何构建此对象,并且出于某种原因显然决定使用 JSON 序列化该对象。在决定使用 JSON 的过程中,您是否没有发现如何实际序列化为 JSON? 这是问题的一部分。不幸的是,我从未使用过 JSON,而且我遇到的大多数教程都涉及解析从 Web 检索到的 JSON 文档,而不是从数组中构造特定的 JSON 文档。我提供了一些关于将数据转换为 JSON 格式的附加代码,但正如我在问题中所说,我不确定如何创建包含两个小节的 JSON 文档,并按照我的描述构建元素。 要构造一个 JSON 字符串,您需要反转这个过程——创建并填充语言对象(例如,NS(Mutable)Array、NS(Mutable)Dictionary),然后使用“镜像”例程反序列化例程将对象序列化为 JSON。但是,您必须小心使用合法的 JSON“东西”来构造源对象——NSStrings、NSNumbers 和其他 NSArrays 和 NSDictionarys。 (请注意,您永远不需要从 NSString 转到 NSData 来反序列化 JSON——我知道的每个 JSON 工具集都可以直接从 NSString 读取。) 【参考方案1】:

大致:

//creating beginning of JSON document here

NSMutableArray* reports = [NSMutableArray array];
NSMutableArray* results = [NSMutableArray array];

for (Person *personObject in testResultArray) 

     if (personObject.testResult == @"na") 

         NSMutableDictionary* naPerson = [NSMutableDictionary dictionary];
         [naPerson setObject:personObject.name forKey:@"name"];
         [naPerson setObject:personObject.date forKey:@"date"];
         [reports addObject:naPerson];
      
     else 
         NSMutableDictionary* person = [NSMutableDictionary dictionary];
         [person setObject:personObject.name forKey:@"name"];
         [person setObject:personObject.date forKey:@"date"];
         [person setObjeect:personObject.testResult forKey:@"testResult"];

         [results addObject:person];
     



NSMutableDictionary* mainDoc = [NSMutableDictionary dictionary];
[mainDoc setObject:reports forKey:@"reports"];
[mainDoc setObject:results forKey:@"results"];

NSString* JSONString = [JSONToolKit stringFromObject:mainDoc];

请注意,Apple 的 NSJSONSerialization 包是脑死的,需要您无用地循环遍历 NSData 表示。使用不同的包——在http://www.json.org/选择一个

【讨论】:

非常感谢您的回复。实际上,我被许多示例吓到了,因为许多示例使用不同的 JSON 第三方库,而每个示例都使用它们来演示不同的功能。话虽如此,如果我决定继续使用 Apple 的原生 JSON 库,那么与您的示例不同,我唯一需要做的就是将 mainDoc 转换为 NSData 对象,然后我将转换为 JSON 对象。会拉我的结果,对吗? 我得到它的工作,做我需要做的事。非常感谢您的宝贵时间和帮助。 关于如何使用 Apple API,您是正确的(据我所知)。但是还有一些其他的套件效果很好,使用起来也不那么尴尬,所以我真的不推荐苹果的东西。无论使用哪种工具包,实际上只有两个接口:语言对象 -> JSON 字符串,以及 JSON 字符串到语言对象。有些人通过使用不同的动词来“修饰”(或混淆,取决于观点),例如数组和字典,但这基本上只是无意义的句法糖。

以上是关于在iOS中使用NSString参数迭代NSMutableArray对象后,需要生成一个JSON文档上传到服务器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发,如何替换plist这个数组下数据

如何在 iOS 中使用图像上传代码发布更多参数?

IOS开发-ObjC-NSString

ios迭代版本,在appstore显示更新功能怎么做

iOS 获取URL中的参数

iOS获取/删除url中的参数