iOS-JSON数据不工作

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

我试图从此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=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
。我测试过了,会很好用的