iOS-JSON数据不工作
我试图从此API获取JSON数据,但得到错误:error Domain=NSCocoaErrorDomain Code=3840“操作无法完成。(Cocoa错误3840.)“(字符0周围的值无效。)UserInfo=0x8b5aa20{NSDebugDescription=字符0周围的值无效。} 代码如下:iOS-JSON数据不工作,ios,json,api,http,get,Ios,Json,Api,Http,Get,我试图从此API获取JSON数据,但得到错误:error Domain=NSCocoaErrorDomain Code=3840“操作无法完成。(Cocoa错误3840.)“(字符0周围的值无效。)UserInfo=0x8b5aa20{NSDebugDescription=字符0周围的值无效。} 代码如下: NSString *post = [NSString stringWithFormat:@"http://api.reittiopas.fi/hsl/1_1_2/?request=rever
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数据。API没有返回格式良好的JSON,因此无法对其进行解析。
您可以使用类似这样的网站来确认API的输出格式不正确,因此无法通过
NSJSONSerialization
解析。您的API根本不返回JSON,而是打印精美的PHP数组:
Edit:在PHP手册上,一位社区成员创建了print\r
的反向部分(在PHP中用于创建您获得的数据)
您可以将此函数转换为Objective-C
编辑II:我创建了一个类来解决您的挑战。您可以在上获取当前分支
漂亮的打印阵列:
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
)
)
)
[{"locType": "address", "locTypeId": 900, "name": "Purotie 8, Helsinki", "matchedName": "", "lang": "fi", "city": "Helsinki", "coords": "2548220,6678497", "distance": "39.2045915678253", "details": {"houseNumber": 8}}]
[
{
"locType": "address",
"locTypeId": 900,
"name": "Purotie 8, Helsinki",
"matchedName": "",
"lang": "fi",
"city": "Helsinki",
"coords": "2548220,6678497",
"distance": "39.2045915678253",
"details": {
"houseNumber": 8
}
}
]
JSON:
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
)
)
)
[{"locType": "address", "locTypeId": 900, "name": "Purotie 8, Helsinki", "matchedName": "", "lang": "fi", "city": "Helsinki", "coords": "2548220,6678497", "distance": "39.2045915678253", "details": {"houseNumber": 8}}]
[
{
"locType": "address",
"locTypeId": 900,
"name": "Purotie 8, Helsinki",
"matchedName": "",
"lang": "fi",
"city": "Helsinki",
"coords": "2548220,6678497",
"distance": "39.2045915678253",
"details": {
"houseNumber": 8
}
}
]
打印精美的JSON:
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
)
)
)
[{"locType": "address", "locTypeId": 900, "name": "Purotie 8, Helsinki", "matchedName": "", "lang": "fi", "city": "Helsinki", "coords": "2548220,6678497", "distance": "39.2045915678253", "details": {"houseNumber": 8}}]
[
{
"locType": "address",
"locTypeId": 900,
"name": "Purotie 8, Helsinki",
"matchedName": "",
"lang": "fi",
"city": "Helsinki",
"coords": "2548220,6678497",
"distance": "39.2045915678253",
"details": {
"houseNumber": 8
}
}
]
使用
[NSData dataWithContentsOfUrl:…]
但响应不是JSON。请参阅我的第二次编辑,我创建了一个GitHub repo,其中包含一个类,可以解决您的难题:为了更方便地帮助您,您只需在API地址中将format=txt
更改为format=JSON
。我测试过了,会很好用的