-4

オブジェクトのコレクションを保持する NSMutableArray があり、各オブジェクトには NSString 型の 3 つのパラメーターがあります。私がする必要があるのは、このコレクションを繰り返し処理し、2 つのサブセクションを持つ単一の JSON ドキュメントを作成することです。1 つは「テスト結果」と呼ばれ、もう 1 つは「レポート」と呼ばれます。NSMutable 配列の各オブジェクトには 3 つの NSString パラメータがあり、これらのパラメータの 1 つは「testResult」と呼ばれます。

「testResult」の値が「pass」または「fail」の場合、そのオブジェクトは「Test Result」セクションに入る必要があります。パラメータの値が「na」の場合、オブジェクトは「Reports」セクションに入ります。「テスト結果」セクションには、「名前」、「日付」、「テスト結果」の 3 つの「要素」が必要です。"Reports" セクションには、"Name" と "Date" の 2 つの要素のみが必要です。私の問題は、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/で 1 つ選択してください

于 2012-12-25T16:18:18.910 に答える