2014-07-08 96 views
0

我有一个方法,我想返回一个NSData对象或一个'NSString',它必须是格式的JSON对象。NSMutableArray到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; 
} 

正如你可以看到我尝试了NSMutableArray转换为NSData对象,但它没有工作。我得到;

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/iOS的:转换对象的数组到JSON字符串]( http://stackoverflow.com/questions/9139454/objective-c-ios-converting-an-array-of-objects-to-json-string) – Mrunal

+0

你是什么意思,**但它没有工作** 。?这应该是正确的 –

+0

@KumarKL我得到终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:'JSON字典'中的'无效(非字符串)键' – DevC

回答

3

您处于正确的轨道上,但您已将您的键/值对颠倒过来。代替使用新的目标C辞典文字语法,这是更短和更容易阅读,并且因此更容易发现错误:

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

EDIT附加问题涉及使用该阵列的描述(即字符串),而不是数组本身,用于创建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