11
[
    {
        "cont": 9714494770,
        "id": "1",
        "name": "Kakkad"
    },
    {
        "cont": 9714494770,
        "id": "2",
        "name": "Ashish"
    }
]

The one above is a json array filled with JSON objects. I don't know how to parse through this with SwiftyJSON

klefevre
  • 8,595
  • 7
  • 42
  • 71
gwhiz
  • 613
  • 1
  • 4
  • 9

4 Answers4

12

Example from the SwiftyJSON page, adapted to your data:

let json = JSON(data: dataFromNetworking)
for (index, object) in json {
    let name = object["name"].stringValue
    println(name)
}
Eric Aya
  • 69,473
  • 35
  • 181
  • 253
  • Why can't it just be for object in json? What does for (index, object) in json do differently that makes it work exactly? I've never seen that before. Thanks – vikzilla Nov 22 '15 at 02:42
  • You can use _ instead of index, but the index can be helpful for certain situations when you need to know where you are in the array. Or you can use key, object for dictionaries. – Stu P. Oct 04 '16 at 14:40
3

Assuming [{"id":"1", "name":"Kakkad", "cont":"9714494770"},{"id":"2", "name":"Ashish", "cont":"9714494770"}] is assigned to a property named jsonData.

let sampleJSON = JSON(data: jsonData)

let sampleArray = sampleJSON.array sampleArray is an optional array of JSON objects.

let firstDict = sampleArray[0] firstDict is an optional JSON dict.

let name = firstDict["name"] is an optional JSON object

let virtName = name.string is a optional string (In this case "Kakkad").

let realName = name.stringValue realName is a string or an empty string.

You could also use: let longName = sampleJSON[0]["name"].stringValue

After you initialize the JSON object with data all of the elements are JSON types until you convert them to a swift type.

  • .string optional (string or null)
  • .stringValue string or "" empty string
  • .dict optional ([String: AnyObject] or null)
  • .dictValue ([String: AnyObject] or String: AnyObject)
adamek
  • 2,324
  • 3
  • 24
  • 38
0

For Swift4 I have updated the code from Moritz answer

    if let path : String = Bundle.main.path(forResource: "tiles", ofType: "json") {
                if let data = NSData(contentsOfFile: path) {
                    let optData = try? JSON(data: data as Data)
                    guard let json = optData else {
                        return
                    }
//If it is a JSON array of objects
                    for (_, object) in json {
                        let name = object["name"].stringValue
                        print(name)
                    }
                }
            }
Mohamed Saleh
  • 2,881
  • 1
  • 23
  • 35
0

Swift 3 or 4 code like this:

let json = JSON(yourData)
for (_, object) in json {
    let cont = object["cont"].stringValue
    print(cont)
}

You can put index instead of _ if you use is anywhere in your code. If you don't use a variable, it's better to put _ (XCode also gives warnings).

Daniel Z.
  • 458
  • 1
  • 3
  • 23