NSMutableArray 在 NSLog 中显示“(” “)” 普通括号而不是 “[” “]” 方括号
NSMutableArray showing "(" ")" normal brackets instead of "[" "]" square bracket in NSLog
我正在尝试在 POST 请求中发送一个 json。
我创建了一个 NSMutableDictionary 并添加了键值对,我有一个 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"];
请帮帮我
打印字典不会在 json 中输出它,它只是 json 巧合,您需要使用 NSJSONSerialization
实用程序将其转换为 [=14] =], here is how it would be used
当您将对象的内容打印到 NSLog
或在调试器中时,然后在后台调用 description
方法。
试一试:
NSString aString = [dict description];
NSLog ("My string: %@", aString);
NSLog ("My dict: %@", dict);
两者看起来都一样。输出恰好提醒您 JSON 结构,但事实并非如此。为此使用 JSON 序列化框架。 NSJSONSerialization
已经存在一段时间了,可以放心使用了。
试试这个
NSError *error;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
NSString *dataString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
现在您的数据字符串将是 JSON
格式的字符串
您还没有序列化您的 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;
}
注意字典输出有 ()
其中 JSON 数据(从字典序列化)有 []
.
你说你的服务器期望这样的输出:
{
key:value,
key:value1,
ArrayKey:[
iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
]
}
那不是 JSON。 iOS 中没有任何东西可以产生那样的输出,服务器也不应该期待那种输出。
并且序列化为 JSON 的对象必须仅包含:NSDictionary、NSArray、NSString、NSNumber 和 NSNull。没有 NSData。您应该首先询问服务人员他们的实际期望是什么。
我正在尝试在 POST 请求中发送一个 json。
我创建了一个 NSMutableDictionary 并添加了键值对,我有一个 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"];
请帮帮我
打印字典不会在 json 中输出它,它只是 json 巧合,您需要使用 NSJSONSerialization
实用程序将其转换为 [=14] =], here is how it would be used
当您将对象的内容打印到 NSLog
或在调试器中时,然后在后台调用 description
方法。
试一试:
NSString aString = [dict description];
NSLog ("My string: %@", aString);
NSLog ("My dict: %@", dict);
两者看起来都一样。输出恰好提醒您 JSON 结构,但事实并非如此。为此使用 JSON 序列化框架。 NSJSONSerialization
已经存在一段时间了,可以放心使用了。
试试这个
NSError *error;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
NSString *dataString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
现在您的数据字符串将是 JSON
格式的字符串
您还没有序列化您的 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;
}
注意字典输出有 ()
其中 JSON 数据(从字典序列化)有 []
.
你说你的服务器期望这样的输出:
{
key:value,
key:value1,
ArrayKey:[
iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
]
}
那不是 JSON。 iOS 中没有任何东西可以产生那样的输出,服务器也不应该期待那种输出。
并且序列化为 JSON 的对象必须仅包含:NSDictionary、NSArray、NSString、NSNumber 和 NSNull。没有 NSData。您应该首先询问服务人员他们的实际期望是什么。