2014-07-08 2 views
0

NSData 객체 또는 형식의 JSON 객체 여야하는 'NSString'중 하나를 반환하려는 메서드가 있습니다.NSMutableArray to JSON 객체

현재로서는 이것이 내가 가지고있는 것입니다. 당신이 볼 수 있듯이

-(NSData *)JSONData{ 

    NSMutableArray* arr = [NSMutableArray array]; 
    for (int j = 0; j < self.sales.subArray.count; j++) 
    { 
     SalesObject* subCategory = [self.sales.subArray objectAtIndex:j]; 


     NSDictionary * dict =[NSDictionary dictionaryWithObjectsAndKeys: 
           @"category_id",subCategory.category_id, 
           @"discounted",@"0", 
           @"price",subCategory.price, 
           @"active",subCategory.isActive, nil]; 
     NSLog(@"Dict %@",dict); 

     [arr addObject:dict]; 

    } 

    NSLog(@"Arr %@",arr); 

    NSLog(@"Arr %@",arr); 

    NSString *string = [arr description]; 
    NSData * jsonData = [NSJSONSerialization dataWithJSONObject:string options:kNilOptions error:nil]; 
    NSLog(@"JSON Data %@",jsonData); 

    return jsonData; 
} 

가 나는 NSData 객체에 NSMutableArray 변환하려고하지만 일을 일부러. 나는 얻다;

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid (non-string) key in JSON dictionary' 

이제 다음과 같은 오류가 발생합니다.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write' 
+0

가능 중복 [오브젝티브 C/아이폰 OS : JSON 문자열 오브젝트의 배열 변환 (http://stackoverflow.com/questions/9139454/objective-c-ios-converting-an-array-of-objects-to-json-string) – Mrunal

+0

** 의미는 무엇입니까 **하지만 작동하지 않았습니다 ** .? 그게 정확해야합니다 –

+0

@KumarKL'NcnvalidArgumentException '이유 : JSON 사전의'유효하지 않은 (문자열이 아닌) 키 '' – DevC

답변

3

당신은 올바른 길을 가고 있지만 키/값 쌍은 반대입니다.

NSDictionary *dict = @{ 
    @"category_id" : subCategory.category_id, 
    @"discounted" : @"0",  // Should that be @(0) ??? 
    @"price"  : subCategory.price, 
    @"active"  : subCategory.isActive 
}; 

EDIT 추가적인 문제는 사용하는 어레이의 설명 관한 대신 새로운 목표-C 사전 리터럴 구문 짧고 읽기 쉽게하기 위해, 실수를 탐지하는 것이 용이하다 사용 배열 자체가 아니라 JSON 데이터를 만드는 데 사용되는 문자열 (즉, 문자열)입니다. 이 같아야

NSError *error = nil; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr 
                options:kNilOptions 
                error:&error]; 
if (!jsonData) { 
    NSLog(@"Achtung! Failed to create JSON data: %@", [error localizedDescription]); 
} 
+2

잘 맞았습니다. –

+0

고마워요 !! 그러나 나는 또 다른 오류가 있음을 압니다. 나는 옳은 길에 있다고 믿는다. 위의 내용을 참조하십시오. – DevC

0

변경 사전 정의에서

NSDictionary * dict =[NSDictionary dictionaryWithObjectsAndKeys: 
          @"category_id",subCategory.category_id, 
          @"discounted",@"0", 
          @"price",subCategory.price, 
          @"active",subCategory.isActive, nil]; 

NSDictionary * dict =[NSDictionary dictionaryWithObjectsAndKeys: 
          subCategory.category_id,@"category_id", 
          @"0", @"discounted", 
          subCategory.price,@"price", 
          subCategory.isActive, @"active", nil]; 
+2

그래, 훨씬 나아 보이네 ... – trojanfoe