-4

我有一个包含对象集合的 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.
4

1 回答 1

0

大致:

//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/选择一个

于 2012-12-25T16:18:18.910 回答