2017-02-02 4 views
3

Я сделал веб-сервис для извлечения JSON данных, который выглядит следующим образом:Использования петель для хранения нескольких объектов JSON в массивы

(это хранится в переменных данных)

{"0":{"categoryId":"1","category":"Restaurants"},"1":{"categoryId":"2","category":"Attractions"},"type":"1006","status":"OK"} 

Однако я не в состоянии успешно получить каждый объект, как я хочу, чтобы хранить их в массив динамически, например

var categoryIDArray = ["1", "2"]; 
var categoryArray = ["Restaurants", "Attractions"]; 

поэтому я изначально хотел сделать следующую логику, как я сделал что-то вроде этого в ndroid студия для Java & Кордовы для JavaScript

//try 
//{ 
// for(var i = 0; i < data.count(); i++) 
// { 
//  categoryIDArray[i] = data[i].categoryId; 
//  categoryArray[i] = data[i].category; 
// } 
//} 
//catch(Exception ex) 
//{ 
// //Catch null pointer or wrong format for json 
//} 

Однако я уже застрял в получении количества JSON в быстром 2.

//I tried doing the following to see if I am able to retrieve data 0 JSON but it failed 
//print(data![0]); 

Следующие коды работают, однако только в состоянии экстрактов одного данные

do{ 
    let json: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
    let test1 = (json!["status"] as? String)! 
    let test2 = (json!["0"] as? String)! 

    print(test1) //shows "OK" 
    print(test2) //shows nil instead of {"categoryId":"1","category":"Restaurants"} 

} catch { 
    print("JSON parse error") 
} 

Любые советы? Благодаря!

+0

Почему веб-сервис делает словарь с целыми числами как ключи вместо массива? Это не очень хороший формат JSON ... – Moritz

+0

@EricAya Привет, можно посоветовать хороший формат json? Я могу внести изменения на данный момент –

+0

Я бы использовал массив для словарей, что-то вроде этого: '{" type ":" 1006 "," status ":" OK "," data ": [{" categoryId " : «1», «категория»: «Рестораны»}, {"categoryId": "2", "category": "Attractions"}]} ' – Moritz

ответ

1

Давайте рассмотрим это утверждение:

let test1 = (json!["status"] as? Int)! 

JSON! означает: Возьмите объект json, разворачивайте его и сбой, если он равен нулю.

json! ["Status"] означает: попробуйте использовать «статус» в качестве индекса в объекте json. Это приведет к сбою, если json не является словарем.

json! ["Status"] as? Int означает: возьмите результат json! ["Status"] и попробуйте преобразовать его в Int, производя nil, если это не удастся.

(json! ["Status"] as? Int)! означает: Возьмите опциональный int из предыдущей строки, разверните его и сработайте, если он равен нулю.

Это около четырех возможных сбоев в одной строке кода.

0

Пожалуйста, попробуйте это. я уверен, что он работает

var arrCatNumber : [String]? = [] 
var arrCatName : [String]? = [] 
let data = ["0":["categoryId":"1","category":"Restaurants"],"1":["categoryId":"2","category":"Attractions"],"type":"1006","status":"OK"] 
//here data is assumed your json data 


for index in 0...data.count - 3{ 
//data.count = 4 means 5 times lopping and we need actually first for 2 than we minus 3. 
//If data["2"],data["3"] come in response than work fine no need any extra implementation 

    let strIndex = String(index) 

    if let test1 = data[strIndex] as? [String : String]{ 
     arrCatNumber?.append(test1["categoryId"]!) 
     arrCatName?.append(test1["category"]!) 
    } 
} 
Смежные вопросы