1

我是 iOS 开发的新手。我想填写这个json

"{
    "form_name":"login_form_mobile",
    "user_login":"mark wallet",
    "password":"123456",
    "dispatch":{"auth.login":"Sign in"}
}
"

进入 NSDictionary 以在帖子中使用它作为使用 AFNetworking 的 URL。

我这样填字典

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-密钥与其值相等,我需要它:not =
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 Request。

4

4 回答 4

4

您需要了解的几件事:

  • 当你 NSLog 一个 NSDictionary 时,它不会显示 JSON 语法。是的,它表面上看起来像 JSON,但是,正如您所指出的,并非所有字符串都被引用(只有那些带有空格或奇数字符的字符串才会被引用)并且=使用 an 而不是:. 这是因为它是一个descriptionNSDictionary 对象,而不是 JSON 翻译。
  • 而且,另一方面,仅仅因为 JSON 和 NSDictionary 之间的东西看起来相同并不能使其相同。您的"dispatch":{"auth.login":"Sign in"}条目将第二个 NSDictonary 表示为键“dispatch”的值。您不能简单地通过使字符看起来像 JSON/description表示来创建第二个字典。相反,您必须(作为一个单独的概念步骤)创建该单元素字典,然后将其作为对象插入到外部字典中。
  • NSDictionary 和 JSON 相同的一个地方是 NSDictionary 和JSON “对象”都没有维护它包含的键/值对的顺序。所以不要期望在一个版本与另一个版本中看到相同顺序的值。
于 2013-05-02T18:17:49.117 回答
1

看看NSJSONSerialization班级。此类中的方法会将 JSON 转换为适当的对象(例如 NSDictionary、NSArray),反之亦然。有关详细信息,请参阅Apple 文档

添加:

例如:

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. 肯定有一些好的。

于 2013-05-02T15:23:36.323 回答
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";
}
于 2013-05-02T17:39:47.443 回答
0

如果您的 json 字符串位于名为“jsonString”的 NSString 变量中:

NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data 
                                                    options:NSJSONReadingAllowFragments 
                                                      error:nil];

因此,您的“dic”变量将具有解析的 json。

于 2013-05-02T15:40:08.447 回答