我正在尝试从此API获取JSON数据,但是我收到错误:错误域= NSCocoaErrorDomain代码= 3840"操作无法完成。 (可可误差3840。)" (字符0周围的值无效。)UserInfo = 0x8b5aa20 {NSDebugDescription =字符0周围的值无效。}
以下是代码:
NSString *post = [NSString stringWithFormat:@"http://api.reittiopas.fi/hsl/1_1_2/?request=reverse_geocode&user=********&pass=********&format=txt&coordinate=2548196,6678528"];
NSError *error = nil;
NSString* newStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:post] encoding:NSUTF8StringEncoding error: &error];
NSData *jsonDataString = [newStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", jsonDataString.description);
NSMutableDictionary *allResults = [NSJSONSerialization
JSONObjectWithData:jsonDataString
options:NSJSONReadingAllowFragments
error:&error];
if(!error){
NSLog(@"%@", allResults.description);
}
else{
NSLog(@"%@", error.description);
}
任何人都可以告诉我为什么会收到此错误。该代码正在使用其他Web的JSON数据。
答案 0 :(得分:3)
API没有返回格式良好的JSON,因此无法解析。
您可以使用http://jsonlint.com/之类的网站来确认API的输出格式不正确,因此无法通过NSJSONSerialization
解析
答案 1 :(得分:3)
您的API根本不会返回JSON,而是打印出漂亮的PHP数组:
编辑:在PHP手册中,一个社区成员创建了与print_r
相反的部分(在PHP中用于创建您获得的数据)。
http://www.php.net/manual/en/function.print-r.php#93529
您可以将此功能转换为Objective-C
编辑II:我创建了一个解决您的挑战的课程。您可以在GitHub
上获取当前分支漂亮的打印数组:
Array
(
[0] => Array
(
[locType] => address
[locTypeId] => 900
[name] => Purotie 8, Helsinki
[matchedName] =>
[lang] => fi
[city] => Helsinki
[coords] => 2548220,6678497
[distance] => 39.2045915678253
[details] => Array
(
[houseNumber] => 8
)
)
)
<强> JSON:强>
[{"locType": "address", "locTypeId": 900, "name": "Purotie 8, Helsinki", "matchedName": "", "lang": "fi", "city": "Helsinki", "coords": "2548220,6678497", "distance": "39.2045915678253", "details": {"houseNumber": 8}}]
相当印刷的JSON:
[
{
"locType": "address",
"locTypeId": 900,
"name": "Purotie 8, Helsinki",
"matchedName": "",
"lang": "fi",
"city": "Helsinki",
"coords": "2548220,6678497",
"distance": "39.2045915678253",
"details": {
"houseNumber": 8
}
}
]