2016-05-22 14 views
0

Es ist ein Wörterbuch, das als JSONObject durch den folgenden Code formatiert ist:Wie "(" von einem JSONObject in swift entfernen

json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
as! NSDictionary 

Daten

{ 
"word": "detrimental", 
"results": [ 
{ 
    "definition": "(sometimes followed by `to') causing harm or injury", 
    "partOfSpeech": "adjective", 
    "synonyms": [ 
     "damaging", 
     "prejudicial", 
     "prejudicious" 
    ], 
    "similarTo": [ 
     "harmful" 
    ], 
    "derivation": [ 
     "detriment" 
    ] 
} 
], 
"syllables": { 
"count": 4, 
"list": [ 
    "det", 
    "ri", 
    "men", 
    "tal" 
] 
}, 
"pronunciation": { 
"all": ",dɛtrə'mɛntəl" 
}, 
"frequency": 2.77 
} 

bis ich versuche, Ausgabe der Daten mit einem Etikett

label.text = "\(json.valueForKeyPath("results.definition")!)" 

Aber die Ausgabe wie folgt aussieht:

(
    "(sometimes followed by `to') causing harm or injury" 
) 

Meine Frage ist, was ist der beste Weg, um die Ausgabe nur den Text ohne "()" zu zeigen?

Ist die einzige Möglichkeit, die JSON-Daten in NSString zu konvertieren und zu teilen? Ich hoffe, es gibt einen besseren Weg, wenn möglich

+0

Mögliche Duplikat [entfernen Zeichen von NSString?] (Http://stackoverflow.com/questions/925780/remove-characters-from-nsstring) – ozgur

Antwort

2

Verwenden Sie keine String-Manipulation, um die Klammern zu entfernen! Holen Sie sich die richtige Zeichenfolge an erster Stelle.

Das Problem ist, dass results im JSON ein Array von mehreren Ergebnissen enthalten:

"results": [ ... ] 

Wenn valueForKeyPath einen Array trifft, es den Rest des Schlüsselpfades jeden (in Ihrem Fall definition) zu gilt Element im Array und gibt ein weiteres Array mit allen Ergebnissen zurück. Wenn Sie ein Array in einen String konvertieren, erhalten Sie () um die Elemente im Array umgeben. (. Und Anführungszeichen um Strings und Kommas zwischen jedem Element Sie wollen wahrscheinlich nicht von denjenigen abweichen.)

Also, wenn Ihr JSON hatte mehr als ein Ergebnis wie folgt aus:

"results": [ 
      { 
      "definition": "first definition", 
      }, 
      { 
      "definition": "second definition", 
      } 
      ], 

der Text in Ihrem Label wäre:

(
    "first definition", 
    "second definition" 
) 

Um dies zu beheben, extrahieren nur das einzelne Element in dem results Array, das Sie eigentlich wollen. Sie können dies leider nicht mit valueForKeyPath machen (siehe this answer). Sie sollten besser die Struktur Ihres JSON auf jeder Ebene überprüfen, anstatt davon auszugehen, dass Sie die Daten im genau erwarteten Format übergeben haben.

if let json = (try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())) as? NSDictionary, 
     results = json["results"] as? NSArray, 
     firstResult = results.firstObject as? NSDictionary, 
     definition = firstResult["definition"] as? String { 
    label.text = definition 
}