0

Data: tried get data from JSON

has code with Swift run on Playground

 var roadWayStatusArray = [AnyObject]()


let url = URL(string: "http://od.moi.gov.tw/data/api/pbs")
let data = try? Data(contentsOf: url!)
let json = try? JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
if let results = json as? [String : AnyObject] {
    if let result = results["result"] as? [[String : AnyObject]] {
        for data in result {
            let happendate = data["happendate"] as? String
            roadWayStatusArray.append(data as AnyObject!)
        }
    }
}

I has tried using roadWayStatusArray.sort(by: >) but Xcode report me Ambiguous reference member '>'

How to create sort by hapendate or happentime

1 Answer 1

1

Your roadWayStatusArray is an array of AnyObject. There is no > operator defined for AnyObject.

The objects in roadWayStatusArray are actually dictionaries that look like this:

{
    UID = "10602090007-0";
    areaNm = "\U4e2d\U5c71\U9ad8\U901f\U516c\U8def-\U570b\U9053\Uff11\U865f";
    comment = "\U5317\U4e0a.\U4e2d\U58e2\U670d\U52d9\U5340 \U51fa\U53e3\U531d\U9053\U4e2d \U53f3\U5074 \U5c0f\U5ba2\U8eca\U505c\U653e\Uff0c\U99d5\U99db\U7591\U4f3c\U7761\U8457\U4e86";
    direction = "\U5317\U4e0a";
    happendate = "2017-02-09";
    happentime = "01:08:00.0000000";
    modDttm = "2017-02-09 01:15:43.603";
    region = N;
    road = "";
    roadtype = "\U5176\U4ed6";
    srcdetail = "\U71b1\U5fc3\U807d\U773e";
    x1 = "121.73558";
    y1 = "25.12263";
}

You need to call sort(by:) with a closure that determines the sort order. For example, if you want to sort by happendate and then happentime:

roadWayStatusArray.sort(by: { (lhsAny, rhsAny) -> Bool in
    let lhs = lhsAny as? [String: AnyObject]
    let rhs = lhsAny as? [String: AnyObject]
    let lhsKey = (lhs?["happendate"] as? String ?? "", lhs?["happentime"] as? String ?? "")
    let rhsKey = (rhs?["happendate"] as? String ?? "", rhs?["happentime"] as? String ?? "")
    return lhsKey < rhsKey
})
Sign up to request clarification or add additional context in comments.

Comments

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.