NSMutableArray显示"("")"普通括号而不是" [" "]" NSLog中的方括号

时间:2015-05-27 07:27:14

标签: ios objective-c nsmutablearray nsarray

我试图在POST请求中发送一个json。

我创建了一个NSMutableDictionary并添加了Key Value对,我有一个NSMutableArray,它包含UIImage的二进制流。

所以当我将这个NSMutableArray添加到NSMutableDictionary并且我做了一个NSLog

结果是

{
key:value,
key:value1,
ArrayKey:(
iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
)

}

但我期望的JSON应该看起来像这样

{
    key:value,
    key:value1,
    ArrayKey:[   
    iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
    ]

    }

" [" "]"方括号是正确的格式,但我得到"("")"

我需要NSMutableArray这个" [" "]"然后只有我的服务器检测到这个json(序列化这个字典后)。

请帮助我的代码;

    UIImage *yourImage= [UIImage imageNamed:@"test.jpg"];
    NSData *imageData = UIImagePNGRepresentation(yourImage);

    dict=[[NSMutableDictionary alloc]init];
    arr1=[[NSMutableArray alloc]init];
    [arr1 addObject:imageData];

    [dict setObject:@"value" forKey:@"key"];
    [dict setObject:@"value1" forKey:@"key1"];
    [dict setObject:arr1 forKey:@"ArrayKey"];

请帮帮我

5 个答案:

答案 0 :(得分:2)

打印字典不会在json中输出它,它只是巧合的json,你需要使用NSJSONSerialization实用程序将它转换为json,here is how it would be used

答案 1 :(得分:0)

当您将对象的内容打印到NSLog或调试器时,然后在后台调用description方法。

试一试:

NSString aString = [dict description]; 
NSLog ("My string: %@", aString);
NSLog ("My dict:   %@", dict); 

两者看起来都一样。输出恰好提醒你一个JSON结构,但事实并非如此。为此使用JSON序列化框架。 NSJSONSerialization现在已经存在了一段时间,可以节省使用。

答案 2 :(得分:0)

试试这个

    NSError *error;
    NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
    NSString *dataString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

现在您的dataString将是JSON格式

的字符串

答案 3 :(得分:0)

您尚未序列化您的NSDictionary,这就是您继续看到()而不是[]的原因。

NSMutableDictionary *jsonDictionary = [NSMutableDictionary new];
NSMutableArray *array = [NSMutableArray new];

[array addObject:@"arrayData1"];
[array addObject:@"arrayData2"];
[array addObject:@"arrayData3"];

[jsonDictionary setObject:@"abhi" forKey:@"name"];
[jsonDictionary setObject:@"bangalore" forKey:@"city"];
[jsonDictionary setObject:array forKey:@"arrayKey"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:nil];
NSLog(@"Dictionary in JSON Format: %@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
NSLog(@"Dictionary Output: %@", jsonDictionary);

来自控制台:

2015-05-27 13:40:15.344 For Abhi[2086:51652] Dictionary in JSON Format: {
  "name" : "abhi",
  "city" : "bangalore",
  "arrayKey" : [
    "arrayData1",
    "arrayData2",
    "arrayData3"
  ]
}
2015-05-27 13:40:15.345 For Abhi[2086:51652] Dictionary Output: {
    arrayKey =     (
        arrayData1,
        arrayData2,
        arrayData3
    );
    city = bangalore;
    name = abhi;
}

请注意,Dictionary输出有(),其中JSON数据(从Dictionary序列化)有[]

答案 4 :(得分:0)

您说您的服务器需要这样的输出:

{
    key:value,
    key:value1,
    ArrayKey:[   
        iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
    ]
}

那不是JSON。 iOS中没有任何东西可以产生这样的输出,服务器也不可能期望这种输出。

序列化为JSON的对象必须只包含:NSDictionary,NSArray,NSString,NSNumber和NSNull。没有NSData。您应首先询问服务器用户他们实际期望的内容。