10

I was wondering how can HTML tags be stripped out of JSON from a web url. Do I have to use NSString of something similar.

So I am looking to strip out the html tags that are in the summary value. I looked around abit and it says NSString can be used but I was not sure if that was something that could be implemented into Swift 3. Any Help would be appreciated.

My code:

import UIKit
import Alamofire

struct postinput {
    let mainImage : UIImage!
    let name : String!
    let author : String!
    let summary : String!

}


class TableViewController: UITableViewController {

    var postsinput = [postinput]()

    var mainURL = "https://www.example.com/api"

    typealias JSONstandard = [String : AnyObject]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        callAlamo(url: mainURL)
    }

    func callAlamo(url : String){
        Alamofire.request(url).responseJSON(completionHandler: {
            response in

            self.parseData(JSONData: response.data!)


        })

    }

    func parseData(JSONData : Data) {
        do {
            var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONstandard
            // print(readableJSON)

            if let posts = readableJSON["posts"] as? [JSONstandard] {
                for post in posts {
                    let title = post["title"] as! String

                    let author = post["author"] as! String

                    guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
                        return
                    }


                    print(author)

                    if let imageUrl = post["image"] as? String {
                        let mainImageURL = URL(string: imageUrl )
                        let mainImageData = NSData(contentsOf: mainImageURL!)
                        let mainImage = UIImage(data: mainImageData as! Data)

                        postsinput.append(postinput.init(mainImage: mainImage, name: title, author: author, summary: summary))
                    }
                }
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }


        }


        catch {
            print(error)
        }


    }

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return postsinput.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        // cell?.textLabel?.text = titles[indexPath.row]

        let mainImageView = cell?.viewWithTag(2) as! UIImageView

        mainImageView.image = postsinput[indexPath.row].mainImage

        //(cell?.viewWithTag(2) as! UIImageView).image = postsinput[indexPath.row].mainImage

        let mainLabel = cell?.viewWithTag(1) as! UILabel

        mainLabel.text = postsinput[indexPath.row].name

        mainLabel.font = UIFont(name: "Helvetica", size:14)

        let autLabel = cell?.viewWithTag(3) as! UILabel

        autLabel.text = postsinput[indexPath.row].author

        autLabel.font = UIFont(name: "Helvetica", size:12)

        let sumLabel = cell?.viewWithTag(4) as! UILabel

        sumLabel.text = postsinput[indexPath.row].summary

        sumLabel.font = UIFont(name: "Helvetica", size:12)


        //(cell?.viewWithTag(3) as! UILabel).text = postsinput[indexPath.row].author

        return cell!
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
4
  • Can you post an example of the response you're trying to parse? Commented Nov 10, 2016 at 15:09
  • Its the JSON structure from (stackoverflow.com/questions/40526761/…) Commented Nov 10, 2016 at 15:16
  • Possible duplicate of Convert HTML to Plain Text in Swift Commented Nov 10, 2016 at 15:37
  • @Palpatim, where would you put that extension code? Commented Nov 10, 2016 at 15:46

1 Answer 1

17

You can use this code for stripping html tags

From your previous question

guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
    return
}
let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
print(str)

Edit

I have checked it and it is working

let summary = "<p>Latin text here</p>"
let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
print(str)

Latin text here

Sign up to request clarification or add additional context in comments.

11 Comments

No error and the html tags are still there.... I have done 'guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else { return let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil) print(str) }'
you don't need to put it in else condition
@rob Can you post the string which you are getting in summary ?
"summary": { "value": "<p>Latin text here</p>", "format": "filtered_html" }
@rob i have checked and updated answer and it is working for me.When you are printing this string print(str) what are you getting in console ?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.