如何将JSONValue与NSMutableArray一起使用

时间:2011-04-07 05:17:51

标签: iphone json ios4 sdk

这是我的代码,它不起作用

NSError *theError = nil;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.bbblllaaahhh.com"]];
NSURLResponse *theResponse =[[NSURLResponse alloc]init];    
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];      
NSMutableString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

self.city = [[NSMutableArray arrayWithArray:[string componentsSeparatedByString:@"\""]] JSONValue];

这是JSON文本

    [
{
"kanji_name":"\u30ac\u30fc\u30c7\u30f3\u30d5\u30a3\u30fc\u30eb\u30ba\u3000\u3068\u306d\u308a\u516c\u5712BigBell"
}
]

它以self.city行报告,我该怎么办?

呀!我完全修复了这是我的修复代码

NSError *theError = nil;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.blahblah.com"]];
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];   
NSMutableString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [string JSONValue];
NSArray *jsonArray = [NSArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]];
NSMutableString *text = [[NSMutableString alloc] init];
[text appendFormat:@"%@",[jsonArray objectAtIndex:0]];
self.city = [NSMutableArray arrayWithObject:text];

1 个答案:

答案 0 :(得分:2)

需要提出几个问题来帮助确定这个问题的答案。

首先,你可以放置

NSLog(@"%@",data);

在第一行之后

NSLog(@"%@", string);

在第二行之后告诉我们它向控制台报告的值是多少?这将有助于确定问题是否

1)服务器永远不会返回任何数据或返回错误的数据 2)如果数据正确地变成了字符串。如果其中任何一个操作失败,可能会导致第3行出错。

接下来,你能报告第三行给出的错误吗?有许多可能的问题。事实上,字符串可能不是正确的JSON代码,而JSON解析器正在崩溃。

第3行看起来有一个明显的问题。首先,您将基于“\”字符拆分字符串,这在这种情况下似乎是一件不寻常的事情。但无论如何,操作的顺序如下:

@ “A \ B”

将变为

[“a”,“b”]

然后JSON解析器将尝试解析[“a”,“b”],这肯定会导致错误。

至少,你会想做类似的事情,

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];      
NSMutableString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSArray or NSDictionary *parserResults = [string JSONValue];

// This will depend on what the actual JSON string returned from the server
// With an array, maybe something like
NSString *stringWithBackslash = [NSArray objectAtIndex:0];

// With a dictionary, maybe something like
NSString *stringWithBackslash = [NSDictionary objectForKey:@"backslashString"];

self.city = [NSMutableArray arrayWithArray:[stringWithBackslash componentsSeparatedByString:@"\""]];

self.city是NSMutableArray吗?变量名称听起来应该是一个字符串。在这种情况下,你实际上想要做一些像

这样的事情
NSMutableArray components = [NSMutableArray arrayWithArray:[stringWithBackslash componentsSeparatedByString:@"\""]];

// if the city is the first element of the array
self.city = [components objectAtIndex:0];

您还需要检查以确保组件(例如)具有多个元素,因为这也可能导致错误,例如,如果服务器返回错误或没有Internet连接。