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。您应该首先询问服务人员他们的实际期望是什么。