XojoでJSONを処理する

2017.10.17  投稿者: moongift
開発

XojoでJSONファイルを取り扱うデモコードです。

最近はWeb APIを扱うことも増えています。その際、多くの場合がJSONを送受信フォーマットに利用しています。

XojoでJSONを扱う場合にはJSONItemを使いますが、キーを指定した時のデータがVariantで返ってくるので扱うが面倒なイメージがあります。そこで今回はJSONItemを扱うためのサンプルコードを書いてみました。

利用したJSONフォーマット

今回はJSONにおける殆どの要素が入っているのではないかと思われるSwagger UIで使われているSwagger Petstoreをベースにします。

処理判定

まずJSONの処理判定の基本は配列かどうかになります。配列の場合は json.Count を使ったループ、オブジェクトの場合は json.Names を使ったループ処理で書けます。

If json.IsArray Then
  // 配列の場合
  For i as Integer = 0 To json.Count - 1
    // 処理
  Next
Else
  // オブジェクトの場合
  For Each key as String in json.Names
    // 処理
  Next
End If

値の判定

JSONの値が取る値の種類は文字列、数字、真偽値、その他(オブジェクト、配列)になります。その値の判定は Xojo.Introspection.GetType(json) で可能です。

Select Case Xojo.Introspection.GetType(json[key]) // またはjson[i]
Case GetTypeInfo(String)
  // 文字列として取り出せる場合
Case GetTypeInfo(Double)
  // 数値として取り出せる場合
Case GetTypeInfo(Boolean)
  // 真偽値として取り出せる場合
Else
  // それ以外の場合はJSONItemに展開
End Select

文字列、数値、真偽値の場合はそれぞれの型にキャストできます。

// 文字列
Dim str as String = json[key]

// 数値
Dim num as Integer = json[key]

// 真偽値
Dim bol as Boolean = json[key]

// それ以外
Dim childJson as JSONItem = json[key]

サンプルコードをgoofmint/Xojo_JSON_Parseにアップロードしてあります。前述のswagger.jsonをJSONItemに読み込んでデバッグ出力するものです。

JSONItemを扱う際の参考にしてください。