2014-11-24 3 views
28

Используя SwiftyJSON, как бы я проанализировал следующий массив JSON в Swift [String]?Как разбирать строковый массив с SwiftyJSON?

{ 
    "array": ["one", "two", "three"] 
} 

Я попробовал этот код, но он не работает для меня:

for (index: String, obj: JSON) in json["array"] { 
     println(obj.stringValue) 
    } 

Что бы лучший способ справиться с этим? Спасибо.

ответ

3

У вас есть Dictionary, который содержит Array, который содержит String. Когда вы получаете доступ к значению в Dictionary, он возвращает простой Array из String s. Вы повторяете его так же, как и любой массив.

for obj in json["array"] { 
    println(obj.stringValue) 
} 
63
{ 
    "myArray": ["one", "two", "three"] 
} 

Используя SwiftyJSON, вы можете получить массив JSON объектов с:

var jsonArr:[JSON] = JSON["myArray"].arrayValue 

Функциональное программирование затем делает его легким для вас, чтобы преобразовать в [String] с помощью «карты» функция. SwiftyJson давайте вы приводите тип строки с индексом «.String»

var stringArr:[String] = JSON["myArray"].arrayValue.map { $0.stringValue} 
+0

Что это за ** ** ** внутри 'карты' закрытия? – Isuru

+1

ah sorry, я отредактировал сейчас, это должно быть «$ 0», это сокращенный аргумент для закрытия карты. .map() будет перебирать каждый элемент массива json и присваивать значение $ 0 каждый раз. – Gwendle

+0

Спасибо. Я сталкиваюсь с подобной проблемой с SwiftyJSON и массивами. Я попробовал преобразовать его, как в вашем ответе, но он разбился с ошибкой ** неожиданно нашел нуль, разворачивая необязательное значение **. Я разместил отдельный вопрос [здесь] (http://stackoverflow.com/q/28739509/1077789). Если можете, можете ли вы, пожалуйста, посмотреть? Благодарю. – Isuru

4

Просто сделать это:

for stringInArray in json["array"]{ 

    let value = stringInArray.1.stringValue 
} 
3

Что вам нужно сделать, это первый фильтр все не строки и затем отливали к строка с картой.

var stringArray = self.json["array"].array?.filter({ $0.string != nil }).map({ $0.string! })

Если вы не фильтровать первый, ваше приложение будет вылетать, если у вас есть что-то другое, чем строка, которая не то, что вы хотите, особенно, когда данные поступают из другого источника.

Смежные вопросы