JSONライブラリを使用してデータを保存しようとしています。SwiftyJSONを使用してJSONデータを保存する方法
var jsonFile = "json.json"
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let jsonFile = "file.json"
let jsonArray:JSON = [
"array": [12.34, 56.78],
"users": [
[
"id": 987654,
"info": [
"name": "jack",
"email": "[email protected]"
],
"feeds": [98833, 23443, 213239, 23232]
],
[
"id": 654321,
"info": [
"name": "jeffgukang",
"email": "[email protected]"
],
"feeds": [12345, 56789, 12423, 12412]
]
]
]
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
{
let path = dir.appendingPathComponent(jsonFile)
if(!FileManager.default.fileExists(atPath: path.path))
{
FileManager.default.createFile(atPath: path.path, contents: Data(), attributes: nil)
print("Created file")
do {
try write(json: jsonArray, to: path)
} catch let error{
print("Error: \(error.localizedDescription)")
}
try! write(json: jsonArray, to: path)
} else {
print("File existed")
do {
let myJSON = try readJSON(myURL: path)
if let _ = myJSON
{
print("Got data")
} else {
print("No Data")
}
} catch let errorOne {
print("Error2: \(errorOne.localizedDescription)")
}
}
}
}
}
let url = Bundle.main.url(forResource: "json", withExtension: "json")
func readJSON(myURL:URL) throws -> JSON? {
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
{
let path = dir.appendingPathComponent(jsonFile)
if(!FileManager.default.fileExists(atPath: path.path))
{
let data = try Data(contentsOf: path, options: .alwaysMapped)
return JSON(data: data)
}
}
return nil
}
func write(json: JSON, to url: URL) throws {
let data = try json.rawData()
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
{
let path = dir.appendingPathComponent(jsonFile)
if(!FileManager.default.fileExists(atPath: path.path))
{
try data.write(to: path)
}
}
}
あなたが初めてプログラムを実行すると、それはファイルを作成し、「jsonArrayを書き込み」:ここで、現時点での私のコードです。再度実行すると、JSONデータが読み込まれます。
readJSON(myURL: path)
の返される値はnil
に等しいという問題があります。
ios 10.2でSwiftyJSONを使用してJSONデータを読み書きするにはどうすればよいですか?
更新
私はiPhone 6s
シミュレータで自分のアプリケーションを実行し、保存したファイルjson.json
をチェックしています。保存されたファイルは次のとおりです。
{"array":[12.34,56.78],"users":[{"id":987654,"info":{"name":"jack","email":"[email protected]"},"feeds":[98833,23443,213239,23232]},{"id":654321,"info":{"name":"jeffgukang","email":"[email protected]"},"feeds":[12345,56789,12423,12412]}]}
エラーを処理するのに 'try-catch'を使わないのはなぜですか?それとは別に、ドキュメントディレクトリ内のファイルが存在する場合でも、JSONを作成するのはかなり効果がありません。 – vadian
@vadianこれは、ライブラリで遊ぶための単なるコードです。このコードはプロジェクトでは使用されません。 JSONデータを保存して読み込む方法を知りたいだけです。また、私のプログラムはクラッシュしていません。それは単にnilを返します。 – iProgram
'try-catch'は例外/クラッシュをキャッチしません**。エラーを報告します。すべての場合に使用することを強く推奨します。エラーが発生する可能性があります。コードをデバッグします。ブレークポイントを設定します。デバッガを使用します。 – vadian