2016-12-10 1 views
-1

Das ist mein json ist zu analysieren (Beispiel):Verwenden Swifty JSON parsen Array

[ 
    { 
    "id": 1, 
    "name": "Team name", 
    "shower": { 
     "id": 1, 
     "status": 1, 
     "startLocation": { 
     "id": 1, 
     "name": "abc 16" 
     } 
    } 
    }, 
    { 
    "id": 2, 
    "name": "Team name", 
    "shower": { 
     "id": 2, 
     "status": 1, 
     "startLocation": { 
     "id": 1, 
     "name": "efg 16" 
     } 
    } 
    } 
] 

wie Sie sehen können, ist es ein Array (von Teams). Ich muss jedes Team holen und etwas damit machen.

Nach vielen Versuchen versuchte ich SwiftyJSON, weil ich dachte, es wird einfacher. Aber es hat nicht für mich funktioniert. Diese

ist, was ich versucht:

let array = JSON(response) 

// print each subJSON in array 
for team in array.arrayValue {      
    print(team)      
} 

Aber die Schleife funktioniert nicht. Es geht überhaupt nicht in die Schleife. Vielleicht versteht es nicht, dass mein JSON ein Array ist.

Ich kann das Array-Objekt im Debugger sehen. Es sieht wie folgt aus:

enter image description here

Wie kann ich diese Unter JSONs bekommen?

Danke.

+0

Ihr JSON ist ungültig. Nach "name": "abc 16" und nach der Zeile sollte kein Komma mehr stehen. –

+0

Verwenden Sie http://www.jsoneditoronline.org, um Ihren json zu validieren. Es zeigt Fehler in Ihrer JSON-Zeichenfolge. – Arjuna

+0

Bitten Sie Ihr Server-Team, Extraa-Schrägstriche vor jedem Wert zu entfernen, der ein Problem zum Abrufen verursacht, weil JSON Schlüsselwertpaar ist, aber es scheint wie Zeichenfolge, die –

Antwort

-1

Ohne SwiftyJSON

Unten ist die gültige JSON

data.json Datei

[{ 
    "id": 1, 
    "name": "Team name", 
    "shower": { 
     "id": 1, 
     "status": 1, 
     "startLocation": { 
    "id": 1, 
    "name": "abc 16" 
     } 
    } 
    }, { 
    "id": 2, 
    "name": "Team name", 
    "shower": { 
     "id": 2, 
     "status": 1, 
     "startLocation": { 
    "id": 1, 
    "name": "efg 16" 
     } 
    } 
}] 

Sie den Code unten Ihre json zu lesen ist.

if let path = Bundle.main.path(forResource: "data", ofType: "json") { 
     let url = URL(fileURLWithPath: path) 
     do { 
      let data = try Data(contentsOf: url) 
      if let jsonArray = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSArray { 
       for (_, item) in jsonArray.enumerated() { 
        let itemDict = item as! NSDictionary 
        let id = itemDict["id"] as! Int 
        let name = itemDict["name"] as! String 
        let shower = itemDict["shower"] as! NSDictionary 

        let showerId = shower["id"] as! Int 
        let showerStatus = shower["status"] as! Int 
        let startLocation = shower["startLocation"] as! NSDictionary 


        let startLocationId = startLocation["id"] as! Int 
        let startLocationName = startLocation["name"] as! String 

       } 
      } 
     } catch { 
      print("Error: \(error.localizedDescription)") 
     } 
} 
1

ich glaube, Sie

let array = JSON(parseJSON: response) 

statt

let array = JSON(response) 
+0

Ich habe deinen Vorschlag @Arjuna versucht, es hat nicht funktioniert. immer noch nicht in der Schleife. Vielen Dank, –

0

SwiftyJSON enthält Methoden zu analysieren JSON-String in ein JSON-Objekt verwenden sollten, überprüfen documentation

/** 
Parses the JSON string into a JSON object 
- parameter json: the JSON string 
- returns: the created JSON object 
*/ 

public init(parseJSON jsonString: String) { 
    if let data = jsonString.data(using: .utf8) { 
       self.init(data) 
      } else { 
       self.init(NSNull()) 
      }   
    }  


/** 
Creates a JSON from JSON string 
- parameter string: Normal json string like '{"a":"b"}' 

- returns: The created JSON 
*/ 
@available(*, deprecated: 3.2, message: "Use instead `init(parseJSON:)`") 
public static func parse(json: String) -> JSON { 
    return json.data(using: String.Encoding.utf8) 
     .flatMap{ JSON(data: $0) } ?? JSON(NSNull()) 
} 

oder alternativ können Sie konv ert Sohn String in Sohn Objekt wie

Swift 3:

let dataFromString = response.data(using: .utf8) 
let jsonArray = JSON(data: dataFromString!) 
0

Im folgende Beispiel, speichere ich Teamnamen in einem Array. Ich habe es getestet.

var names = [String]() 
if let array = json.array { 
    for i in 0..<array.count { 
     let name = array[i]["name"] 
     names.append(name.stringValue) 
    } 
} 

print(names) // ["Team name", "Team name"] 
-1

das ist, was für mich gearbeitet:

// Convert JSON to Array 
    func JSONToArray(_ json: String) -> Array<Any>? { 
     if let data = json.data(using: String.Encoding.utf8) { 
      do { 
       return try JSONSerialization.jsonObject(with: data, options: []) as? Array 
      } catch let error as NSError { 
       print(error) 
      } 
     } 
     return nil 
    } 

Nach der Verwendung dieser Funktion ich könnte Schleife Trog die Unter JSONs.

Danke.