在 JSON 中解析 <img src> 标签 - iOS

Posted

技术标签:

【中文标题】在 JSON 中解析 <img src> 标签 - iOS【英文标题】:Parse <img src> tag in JSON - iOS 【发布时间】:2015-05-26 09:25:09 【问题描述】:

我有一个下载 JSON 提要的 ios 应用。除了剩下的一个元素(图像)之外,我已经成功地解析了所有内容。

我正在下载的 JSON 提要来自在线 php 脚本,该脚本将某些 RSS 提要转换为 JSON。因此,为什么在包含图像的 JSON 提要的元素之一中有 html 图像标签。

我正在使用以下代码来访问诸如标题、日期、链接 URL 等内容...而且效果很好:

NSArray *titles = [[[[data_dict objectForKey:@"rss"] valueForKey:@"channel"] valueForKey:@"item"] valueForKey:@"title"];

从我上面的代码中可以看出,标题存储在名为“title”的 JSON 标记中。非常容易解析。图片存储在一个名为“description”的标签中。

此标记如何还包含文本和图像 URL。那么如何从中解析&lt;img src&gt;标签呢?

这是 JSON 描述标签之一:

如何解析数组中的图片链接?

感谢您的宝贵时间,丹

【问题讨论】:

您可以使用 NSAttributedString 并阅读 HTML 文本。 【参考方案1】:

请尝试以下代码 -

NSString *yourHTMLSourceCodeString = @"";

    NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>)+?"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

[regex enumerateMatchesInString:yourHTMLSourceCodeString
                        options:0
                          range:NSMakeRange(0, [yourHTMLSourceCodeString length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) 

                         NSString *img = [yourHTMLSourceCodeString substringWithRange:[result rangeAtIndex:2]];

                         NSURL *candidateURL = [NSURL URLWithString:img];

                         if (candidateURL && candidateURL.scheme && candidateURL.host)
                         
                             NSLog(@"img src %@",img);
                         


                     ];

更新 使用下面的正则表达式更改可以完成同样的事情 -

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"]((http|https)://.*?)['\"][\\s\\S]*?>)+?"
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];

【讨论】:

好的,这是非常棒的解决方案!只是一个问题,有时在这些提要中,其他随机图像出现在描述标签中,例如以“.img”结尾的图像或在链接末尾甚至没有图像扩展名的图像链接。我怎样才能区分这些链接?我只想显示实际上是网站提要一部分的图像,而不是像“rssbutton.img”这样的随机图像? 您也可以使用正则表达式更改 NSRegularExpression regex = [NSRegularExpression regularExpressionWithPattern:@"(?src\\s *?=\\s*?['\"]((http|https)://.*?)['\"][\\s\\S]*?>)+?" 不,那没用。实际上,我最终在您的代码 if (([img containsString:@".jpg"]) || ([img containsString:@".png"]) || ([img containsString:@".jpeg"])) ... 中添加了另一个 if 语句来决定是否使用该图像。感谢您的帮助:)

以上是关于在 JSON 中解析 <img src> 标签 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 <script> 标记中的 html 上使用 json 脚本并在 <img src=???/> 中填充数据

正则表达式 <img > 标签解析与 src、宽度、高度

如何在angularjs中上传已经在<img src>中的图像

json web token + img src

vue中,图片<img src="path"/>如何加载绝对路径的图片?例如:D:/photo/fileName

Python BeautifulSoup 替换 img src