我一直在墙上砸了一下。
我有一个rails后端,它将JSON返回到我的iOS应用程序。我正在使用rails的默认返回来自动为我渲染我的JSON对象。我遇到了它返回的错误。
我得到的JSON错误是{"errors":{"email":["can't be blank"],"password":["can't be blank"]}}
。
我使用ASI处理请求。
-(void) requestFinished:(ASIFormDataRequest *)request {
NSDictionary *data = [[request responseString] JSONValue];
执行上述代码使数据变为:
{
errors =
{
email = (
"can't be blank"
);
password = (
"can't be blank"
);
};
}
现在这给了我试图解析它的问题。我希望能够访问错误的每个元素及其相关值。
当我尝试遍历元素时,我会执行以下操作:
for (NSDictionary *error in [data objectForKey:@"errors"])
这会给我email
和password
,但它们的类型为__NSCFString
,而不是NSDictionary
。我无法找到获取电子邮件或密码值的方法。有没有人知道如何解析这个?
谢谢!
答案 0 :(得分:1)
我现在没有Mac
但是如果它不起作用我正试图帮助你让我知道我明天会纠正它。
-(void) requestFinished:(ASIFormDataRequest *)request
{
NSArray *data = [[request responseString] JSONValue];
NSDictionary *dict = [data objectAtIndex:0];
NSDictionary *dict2 = [dict valueForKey:@"errors"];
NSLog(@"email = %@, password = %@",[dict2 valueForKey:@"email"], [dict2 valueForKey:@"password"]);
}
答案 1 :(得分:1)
这应该有效,请注意,响应的结构与“数据”NSDictionary的结构相同。
NSDictionary *fields = [[NSDictionary alloc] initWithObjectsAndKeys: [[NSArray alloc] initWithObjects:@"one", @"two", nil],
@"A",
[[NSArray alloc] initWithObjects:@"three", @"four", nil],
@"B",
nil];
NSDictionary *response = [[NSDictionary alloc] initWithObjectsAndKeys:fields, @"errors", nil];
NSLog(@"Dictionary: %@", [response objectForKey:@"errors"]);
for (NSString *field in [response objectForKey:@"errors"])
for (NSString* error in [response valueForKeyPath:[NSString stringWithFormat:@"errors.%@", field]])
NSLog(@"%@ %@", field, error);
输出将如下所示:
Dictionary: {
A = (
one,
two
);
B = (
three,
four
);
}
A one
A two
B three
B four