2016-11-05 6 views
-1

У меня есть локальный файл в формате JSON с именем, как например: testTheJSON.json(Swift3) Может вернуть полный файл JSON, но я не могу вернуть определенное значение, что я делаю неправильно?

{"myJSON": 
[{ 
"ID1" : 
    {"name":"Stack", 
    "LastName": "Overflow" 
    }, 
"ID2" : 
    {"name":"Cat", 
    "last":"dog", 
    } 
} 
] 
} 

и я стараюсь читать в файле, как например:

func parseJSON() { 
    let path = Bundle.main.path(forResource: "testTheJSON", ofType: "json") 
    let jsonData : NSData = NSData(contentsOfFile: path!)! as NSData! 
    let readableJSON = JSON(data: jsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil) 
    var name = readableJSON["myJSON","ID1","name"] 
    print(readableJSON) //returns the full JSON script 
    print (name) //returns null 
} 

Почему print(readableJSON) возвращает полный файл в формате JSON и print(name) return как null? Я неправильно делаю строку var name = readableJSON["myJSON","ID1","name"]? Благодаря!

EDIT: Я использую среду SwiftyJSON - это метод JSON. Я следовал этому учебник: https://www.youtube.com/watch?v=_NfijT6mt6A

+0

Что такое 'JSON'? В iOS такого класса нет. – rmaddy

+0

Добавлено редактирование выше, это из среды SwiftyJSON. – Sami

+0

Вы должны полностью удалить NSData из этого кода. Тип Swift 3, который вы хотите использовать, это Data. – matt

ответ

1

Вы правильно чтение в содержании вашего testTheJSON.json файла и прошу SwiftyJSON разобрать его. (Ваш код делает некоторые довольно плохое использование класса NSData, но это на самом деле не вызывает ничего, чтобы пойти не так.)

Проблема заключается в том, что ваш testTheJSON.json файл не действует в формате JSON. Следовательно, синтаксический анализ не выполняется, и возвращается nil - это на самом деле правильное поведение. Поэтому нет ничего плохого. Мы хотим, чтобы анализатор терпел неудачу, когда ему были переданы неверные данные.

Это на самом деле отвечает на вопрос, но в качестве бонуса, я также даст вам версию действительна вашего файла:

{"myJSON": 
[{ 
"ID1" : 
    {"name":"Stack", 
    "LastName": "Overflow" 
    }, 
"ID2" : 
    {"name":"Cat", 
    "last":"dog" 
    } 
} 
] 
} 

ли вы видите разницу? (Подсказка: это после "dog".)

После этого вы можете исправить ваше индексированное выражение, которое в настоящее время не так. Оно должно быть:

let name = readableJSON["myJSON"][0]["ID1"]["name"] 

Или вы можете написать:

let name = readableJSON["myJSON",0,"ID1","name"] 
+0

Спасибо - я попробовал использовать этот JSON-файл, который вы предоставили, но такое же поведение по моему вопросу выставлено. Есть ли лучший способ попытаться сделать тот же звонок? – Sami

+0

«но такое же поведение от моего вопроса выставляется« Нет, это не так! Вы неправы. 'name' по-прежнему имеет значение null, но' readableJSON' теперь корректно показывает проанализированный файл. - Добавлен код, чтобы заменить ваш бессмысленный вывод 'name', так что теперь он также не будет пустым. – matt

+0

Спасибо @Matt. Это решило мою проблему. – Sami