1. ホーム
  2. ios

[解決済み] URLの文字列を解析してキーの値を取得する最良の方法とは?

2023-05-28 22:45:58

質問

このような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月)。 この答えの方が良い . アップルが追加した NSURLComponents を iOS 7 で追加しました。 .

辞書を作成し、キーと値のペアを配列で取得して

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"];

これは未検証なので、もっとエラーテストをしたほうがいいでしょう。