Ios NSMUTABLEARRY显示“;("")";用普通括号代替“1”;[quot;];NSLog中的方括号

Ios NSMUTABLEARRY显示“;("")";用普通括号代替“1”;[quot;];NSLog中的方括号,ios,objective-c,nsmutablearray,nsarray,Ios,Objective C,Nsmutablearray,Nsarray,我试图在POST请求中发送一个json 我创建了一个NSMutableDictionary并添加了键值对,我有一个NSMutableArray,其中包含UIImage的二进制流 所以当我将这个NSMutableArray添加到NSMutableDictionary中时,我做了一个NSLog 所以结果是 { key:value, key:value1, ArrayKey:( iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3 )

我试图在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
实用程序将其转换为json,

当您将对象的内容打印到
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数据(从字典序列化)有
[]

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

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);
{
    key:value,
    key:value1,
    ArrayKey:[   
        iuhdgbdsnb325435435j435bu4h5h45hu34h545ih43h5i43hi5hu3i4h5u3
    ]
}
这不是JSON。iOS中没有任何东西可以产生这样的输出,服务器也不可能期望这种输出


序列化为JSON的对象只能包含:NSDictionary、NSArray、NSString、NSNumber和NSNull。没有数据。您应该首先询问服务器人员他们的实际期望

将数组的description方法的输出与正确的JSON序列化的输出混淆。别担心。只需正确构建JSON。请从我的唇边读出来:NSDictionary和NSArray都不会以JSON格式在日志中显示自己。这是两个不同的东西,它们看起来很相似。当您将NSMutableArray添加到NSMutableDictionary时,您怎么能期望它成为JSON对象?如果需要JSON,则需要使用
NSJSONSerialization
。查看此项了解更多详细信息。@HermannKlecker dude我的问题很简单“为什么在打印数组而不是[]方括号时使用()普通括号”@abhibangalore Lol。为什么您希望NSArray使用JSON格式?两者都不同。iam也使用nsjson序列化。但我的问题是nsmutable数组括号是打印json字符串还是字典?发布您的代码如何记录jsoneven i print dictionary或json NSMutableArray应类似于方括号中的[],而不是普通的()括号中的NSMutableArray现在我正在()中获取NSMutableArray,这是wrong@abhibangalore您正在向JSON对象添加NSData。不确定是否可以将数据添加到JSONHello boss。我的问题是,如果使用方括号,为什么使用普通括号。@abhibangalore,因为
[NSArray description]
方法就是这样决定编写它的。你需要被告知多少次?它不必符合JSON,因为JSON只是表示数据的一种方式。@abhibangalore。。您必须像这样
序列化
您的
字典
,然后只创建
json
,您将得到[],而不是()。试着把它序列化一次。