【问题标题】:impossible to parse a url containing "and space in xcode无法解析包含“和 xcode 中的空格的 url
【发布时间】:2014-02-12 11:22:31
【问题描述】:

我正在尝试在如下网址中解析 json:

NSError *error = nil;
    NSString *sampleUrl= @"http://xbmc:xbmc@192.168.1.23:8080/jsonrpc?request={\"jsonrpc\":%20\"2.0\",%20\"method\":%20\"VideoLibrary.GetMovies\",%20\"params\":%20{%20\"filter\":%20{\"field\":%20\"playcount\",%20\"operator\":%20\"is\",%20\"value\":%20\"0\"},%20\"limits\":%20{%20\"start\"%20:%200,%20\"end\":%2075%20},%20\"properties\"%20:%20[\"art\",%20\"rating\",%20\"thumbnail\",%20\"playcount\",%20\"file\"],%20\"sort\":%20{%20\"order\":%20\"ascending\",%20\"method\":%20\"label\",%20\"ignorearticle\":%20true%20}%20},%20\"id\":%20\"libMovies\"}";
    NSLog(@"%@ ",sampleUrl);

    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:sampleUrl]];

    id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

但我收到一条错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'

当我在浏览器中复制我的网址时:它可以工作! 但不是当我尝试使用 xcode 我尝试将设置“更改 22% 并消除 \ : 不起作用!

我该如何进行? 谢谢

【问题讨论】:

  • 你需要什么结果
  • 我需要一个电影列表,例如...
  • 正确的 url 是:192.168.1.66:8080/jsonrpc?request={"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "filter": {"field": " playcount”,“operator”:“is”,“value”:“0”},“limits”:{“start”:0,“end”:75},“properties”:[“art”,“rating” , "thumbnail", "playcount", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies" }
  • 这是错误的网址,你能给出正确的网址吗,如果正确,我会在5分钟内给出答案,k
  • 错误的网址?我在这里(wiki.xbmc.org/index.php?title=JSON-RPC_API/Examples)举了例子,它适用于 safari / chrome 或 firefox ...

标签: ios json xcode


【解决方案1】:

问题在于sampleUrl 中的字符串不是格式正确的 URL(请参阅RFC 1738)。

它包含 URL 中不允许使用的各种字符,例如 {"。在转换为 NSURL 之前,必须对这些字符进行百分比转义。

您的 URL 字符串真正来自哪里?

【讨论】:

【解决方案2】:

以下是令人惊叹的结果:

NSString *urlString = [NSString stringWithFormat:@"http://xbmc:xbmc@192.168.1.23:8080/jsonrpc?request={\"jsonrpc\": \"2.0\", \"method\": \"VideoLibrary.GetMovies\", \"params\": { \"filter\": {\"field\": \"playcount\", \"operator\": \"is\", \"value\": \"0\"}, \"limits\": { \"start\" : 0, \"end\": 75 }, \"properties\" : [\"art\", \"rating\", \"thumbnail\", \"playcount\", \"file\"], \"sort\": { \"order\": \"ascending\", \"method\": \"label\", \"ignorearticle\": true } }, \"id\": \"libMovies\"}"];
    NSLog(@"%@ ",sampleUrl);
    NSString *encodedUrl = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    NSURL *url = [[NSURL alloc] initWithString:encodedUrl];


    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:encodedUrl]];

    id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

感谢大家的帮助;)

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多