当前位置: 首页 > 面试题库 >

解析URL字符串以获取键值的最佳方法?

景唯
2023-03-14
问题内容

我需要解析这样的URL字符串:

&ad_eurl=http://www.youtube.com/video/4bL4FI1Gz6s&hl=it_IT&iv_logging_level=3&ad_flags=0&endscreen_module=http://s.ytimg.com/yt/swfbin/endscreen-vfl6o3XZn.swf&cid=241&cust_gender=1&avg_rating=4.82280613104

我需要将NSString拆分为类似cid=241和的标志部分&avg_rating=4.82280613104。我一直在用,substringWithRange:但是值以随机顺序返回,所以搞砸了。是否有任何类可以轻松解析,因此您基本上可以将其转换为NSDictionary以便能够读取键的值(例如ValueForKey:cid应该返回241)。还是有比使用NSMakeRange子字符串更简单的解析方法


问题答案:

**编辑(2018年6月):[
这个答案更好

您可以queryItems在中使用URLComponents。

当获得该属性的值时,NSURLComponents类将解析查询字符串并返回一个NSURLQueryItem对象数组,每个对象代表一个键-值对,并按照它们在原始查询字符串中出现的顺序排列。

let url = "http://example.com?param1=value1&param2=param2"
let queryItems = URLComponents(string: url)?.queryItems
let param1 = queryItems?.filter({$0.name == "param1"}).first
print(param1?.value)

另外,您可以在URL上添加扩展名,以简化操作。

extension URL {
    var queryParameters: QueryParameters { return QueryParameters(url: self) }
}

class QueryParameters {
    let queryItems: [URLQueryItem]
    init(url: URL?) {
        queryItems = URLComponents(string: url?.absoluteString ?? "")?.queryItems ?? []
        print(queryItems)
    }
    subscript(name: String) -> String? {
        return queryItems.first(where: { $0.name == name })?.value
    }
}

然后,您可以按名称访问参数。

let url = URL(string: "http://example.com?param1=value1&param2=param2")!
print(url.queryParameters["param1"])

我将创建一个字典,获得键/值对的数组

NSMutableDictionary *queryStringDictionary = [[NSMutableDictionary alloc] init];
NSArray *urlComponents = [urlString componentsSeparatedByString:@"&"];

然后填充字典:

for (NSString *keyValuePair in urlComponents)
{
    NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];
    NSString *key = [[pairComponents firstObject] stringByRemovingPercentEncoding];
    NSString *value = [[pairComponents lastObject] stringByRemovingPercentEncoding];

    [queryStringDictionary setObject:value forKey:key];
}

然后,您可以查询

[queryStringDictionary objectForKey:@"ad_eurl"];

这未经测试,您可能应该再进行一些错误测试。



 类似资料:
  • 在python中,从URL查询字符串(例如,通过表单附加到URL的数据)解析数据的最佳方法是什么?我的目标是接受表单数据并将其显示在同一页面上。我已经研究了几种方法,但并不完全是我想要的。 我正在创建一个简单的Web服务器,目标是学习套接字。此Web服务器仅用于测试目的。

  • 问题内容: 我需要从此URL获取查询字符串,并且我不想使用request.META。我已经发现还有两种获取查询字符串的方法: 使用urlparse urlparse.urlparse(url).query 使用url编码 使用urlencode并向其中传递request.GET params字典以获取字符串表示形式。 那么哪种方法更好呢?我的同事更喜欢urlencode,但没有提供令人满意的解释。

  • 我需要从这个URL获取查询字符串https://stackoverflow.com/questions/ask?next=1 > 使用urlparse urlparse.urlparse(url.query) 使用url encode使用urlencode并将request.GET params字典传递到其中以获取字符串表示形式。 那么哪种方式更好呢?我的同事更喜欢urlencode,但没有提供令

  • 问题内容: 我正在使用解析Java中的字符串。但是,没有直接解析字符串的函数,所以我改为这样做: 这是最好的方法吗?我觉得必须有一个更简单的方法…谢谢! 问题答案: 直接回答您的问题-据我所知,没有更好的方法。使用输入源是因为它比较通用,可以处理来自文件,字符串或跨线的输入,这是我的理解。 您还可以尝试使用SAX Xml解析器- 它稍微有点基础,并且使用了Visitor模式,但是可以完成工作,对于

  • 问题内容: 如果我有一个JS对象,例如: 如果我知道键具有基本的键/值结构,但不知道键的名称,那么最简单的方法是什么???我希望有更好的… 问题答案: 如果要获取所有密钥,则可以使用ECMAScript5。只有较新的浏览器才支持此功能,但MDC文档提供了另一种实现方式(也使用btw): 当然,如果您想要键和值,那么这是唯一合理的解决方案。

  • 问题内容: 我有一个字符串,例如“ 600sp”,我希望从中获得整数部分(600)。 如果我这样做,由于字符串中遇到非数字值“ s”,我将收到异常。 抓住整数部分的最快最干净方法是什么? 谢谢! 问题答案: 如果您的字符串格式始终是数字后跟一些字符,请尝试执行此操作