✏️

SwiftUI で JSON を表示する View

2022/09/03に公開

を作りました。

https://gist.github.com/niaeashes/e2c927c8d5ddac3b161e2dbe6f0e75b8

ファイル1個で完結しているので、Debug Build 時にだけ使えるようにしたら平和になります。Framework にしなかったのは、1ファイルで収まるコードなのでそこまでやるのは過剰かなと考えたためです。アップデートの予定もないし。

http で開始する文字列は URL としてパースを試みます。成功すれば、URL っぽく表示されます。また、長押しで Safari で開くメニューが出ます。

LazyVStack すると壊れがちになるんですが、JSONが巨大だとレンダリングに時間がかかりがちなので、デフォルトでは適当なところで Object / List を閉じています。タップで開けます。

JSONSerialization

JSONSerializationは Integer も Number も Boolean も全部 NSNumber に変換します。いい感じに判定する必要があります。いろいろやり方はあるようですが、こんな感じでやっています。

        case let num as NSNumber:
            let encoding = String(cString: num.objCType)
            if encoding == "d" {
                return .num(Double(truncating: num))
            }
            if encoding == "c" {
                return .flag(Bool(exactly: num)!)
            }
            return .int(Int(truncating: num))

Discussion