我是iOS开发的新手。 我想填写这个json
"{
"form_name":"login_form_mobile",
"user_login":"mark wallet",
"password":"123456",
"dispatch":{"auth.login":"Sign in"}
}
"
进入NSDictionary,使用AFNetworking在post中使用它。
我像这样填写字典
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"login_form_mobile",@"form_name",@"markwallet",@"user_login",@"123456",@"password",@"{ \" auth.login \" : \" Sign in \" }",@"dispatch", nil];
现在我有两个问题 1 - 显示auth.login前后的\“,因为我只想显示双引号。 顺便说一句,我试图制作一个嵌套字典,这解决了第一个问题,但第二个问题没有解决。 2 - 当我运行应用程序时。并查看字典是如何填充的,它显示如下
{
dispatch = "{ \" auth.login \" : \" Sign in \" }";
"form_name" = "login_form_mobile";
password = 123456;
"user_login" = markwallet;
}
a-键和它的值之间是相等的,我需要它:不是=
b-有些词没有“”像密码,123456和markwallet。我不知道为什么
c-我也不知道为什么派遣和它的价值在第一个。
编辑:
我使用了这个新代码。
NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"Sign in",@"auth.login", nil];
NSArray *keys = [NSArray arrayWithObjects:@"form_name",@"user_login",@"password",@"dispatch",nil];
NSArray *objects = [NSArray arrayWithObjects:@"login_form_mobile",@"markwalletz",@"123456",dic,nil];
NSMutableDictionary * params1 = [[NSMutableDictionary alloc]init];
params1 = [NSMutableDictionary dictionaryWithObjects:objects forKeys:keys];
但是当我在调试中看到params1值时
{
dispatch = {
"auth.login" = "Sign in";
};
"form_name" = "login_form_mobile";
password = 123456;
"user_login" = markwalletz; }
这与我在问题顶部所述的需要不同 当我用这本词典发送请求时,它会回复BAD请求。
答案 0 :(得分:4)
您需要了解的几件事情:
=
代替:
。这是因为它是NSDictionary对象的description
,而不是JSON转换。"dispatch":{"auth.login":"Sign in"}
条目代表第二个NSDictonary,作为关键“dispatch”的值。您不能简单地通过使字符看起来像JSON / description
表示来创建第二个字典。相反,您必须(作为单独的概念步骤)创建该单元素字典,然后将其作为对象插入外部字典中。答案 1 :(得分:1)
查看NSJSONSerialization
课程。此类中的方法将JSON转换为适当的对象(例如NSDictionary,NSArray),反之亦然。有关详细信息,请参阅Apple Documentation。
<强>加了:强>
例如:
NSString *jsonString = ... // Whatever your JSON is
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *d = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
你得到的是一个字典d
,它包含JSON中描述的所有键及其值(假设JSON代表字典)。 JSON数据也可以表示对象数组。这一切都非常灵活。我建议阅读参考文档并使用NSJSONSerialization
在此搜索其他示例。肯定有一些好的。
答案 2 :(得分:1)
“jsonString”变量应该形成如下:
NSString *jsonString = @"{\"form_name\":\"login_form_mobile\",\"user_login\":\"mark wallet\",\"password\":\"123456\",\"dispatch\":\{\"auth.login\":\"Sign in\"}}";
然后,使用上面的代码:
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:nil];
NSLog(@"DIC %@",dic);
将输出:
DIC {
dispatch = {
"auth.login" = "Sign in";
};
"form_name" = "login_form_mobile";
password = 123456;
"user_login" = "mark wallet";
}
答案 3 :(得分:0)
如果您的json字符串位于名为“jsonString”的NSString变量中:
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:nil];
所以你的“dic”变量将有解析的json。