質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1191閲覧

Codable Encoderでjsonを作る

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/06/26 08:27

plan:{ points:{ lat:*****, lng:*****, height:***** }, points:{ lat:*****, lng:*****, height:***** }, }

このようなpointsが複数回繰り返されているjsonを作りたいのですが、
調べて見ましたが、出てきません。
どうしたらいいか教えてください。

今、参考にしているサイトです
(https://medium.com/@digitalnauts/swift4-codable-json-encode-17eaa95372d1)

struct Plan:Codable{ let points : [Point] struct Point:Codable{ let lat : Double? let lng : Double? let height : Double? } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

json形が正しくないですね、以下の様にすることで読み込めます。
※まずjsonの形が正しいかのチェックはしたほうがいいですね。
JSON Editor online

swift

1 2struct Locations: Codable { 3 var plan: [Location] 4 5 struct Location: Codable { 6 var points: Point 7 8 struct Point: Codable { 9 var lat: Double? 10 var lng: Double? 11 var height: Double? 12 } 13 } 14} 15 16var data = """ 17{"plan":[ 18{"points":{ 19"lat":123.111, 20"lng":456.222, 21"height":50.0 22}}, 23{"points":{ 24"lat":789.888, 25"lng":22.666, 26"height":30.0 27}}] 28} 29""".data(using: .utf8) 30 31// Decode 32let locations = try? JSONDecoder().decode(Locations.self, from: data!) 33if let locations = locations { 34 35 for location in locations.plan { 36 print(location.points.lat) 37 print(location.points.lng) 38 print(location.points.height) 39 } 40} 41 42// Encode 43let point1 = Locations.Location(points: Locations.Location.Point(lat: 123.111, lng: 456.222, height: 50.0)) 44let point2 = Locations.Location(points: Locations.Location.Point(lat: 789.888, lng: 22.666, height: 30.0)) 45let locations1 = Locations(plan: [point1, point2]) 46 47let encoder = JSONEncoder() 48encoder.outputFormatting = .prettyPrinted 49let encoded = try! encoder.encode(locations1) 50print(String(data: encoded, encoding: .utf8)!)

投稿2018/06/26 23:32

編集2018/06/26 23:47
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/27 06:50

ありがとうございます。 うまくすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問