2016-07-30 8 views
3

Я пытаюсь перебрать массив внутри массива. Первый цикл был легким, но у меня возникла проблема с прохождением через второй массив внутри него. Любые предложения приветствуются!SwiftyJson: Зацикливание массива внутри массива

{ 
"feeds": [ 
{ 
    "id": 4, 
    "username": "andre gomes", 
    "feeds": [ 
    { 
     "message": "I am user 4", 
     "like_count": 0, 
     "comment_count": 0 
    } 
    ] 
}, 
{ 
    "id": 5, 
    "username": "renato sanchez", 
    "feeds": [ 
    { 
     "message": "I am user 5", 
     "like_count": 0, 
     "comment_count": 0 
    }, 
    { 
     "message": "I am user 5-2", 
     "like_count": 0, 
     "comment_count": 0 
    } 
    ] 
} 
] 
} 

Как вы видите, у меня возникают проблемы, чтобы добраться до поля сообщения и т.д.

Вот мой код на swiftyjson

let json = JSON(data: data!) 

for item in json["feeds"].arrayValue { 

print(item["id"].stringValue) 
print(item["username"].stringValue) 
print(item["feeds"][0]["message"]) 
print(item["feeds"][0]["like_count"]) 
print(item["feeds"][0]["comment_count"]) 

} 

Выход я получаю

4 
andre gomes 
I am user 4 
0 
0 
5 
renato sanchez 
I am user 5 
0 
0 

Как вы видите, я не могу получить сообщение «Я пользователь 5-2» и соответствующий like_count и comment_count

ответ

2

Вы уже продемонстрировали, как цикл через массив JSON, так что вам нужно только сделать это снова с внутренней feeds:

let json = JSON(data: data!) 

for item in json["feeds"].arrayValue { 

    print(item["id"].stringValue) 
    print(item["username"].stringValue) 

    for innerItem in item["feeds"].arrayValue { 
     print(innerItem["message"]) 
     print(innerItem["like_count"]) 
     print(innerItem["comment_count"]) 
    } 

} 

Если вы хотите только первый элемент внутренней feeds массива, заменить внутренний для lop с этим:

print(item["feeds"].arrayValue[0]["message"]) 
print(item["feeds"].arrayValue[0]["like_count"]) 
print(item["feeds"].arrayValue[0]["comment_count"]) 
+0

Работали как очарование! Два массива кормов наверняка меня смутили, но ваш ответ прояснил ситуацию! –

+0

В любом случае я могу напечатать идентификатор и имя пользователя внутри цикла внутреннего элемента? Дело в том, что это облегчит хранение при наличии нескольких внутренних каналов –

+1

Просто переместите 'print (item [" id "]. StringValue)' line во внутренний цикл –