XPRIM_JsonObjectXPRIM_JsonArray を JSON 文字列にシリアル化することが可能ですが、目的が JSON 文字列の構築、もしくは XPRIM_HttpRequest 用の JSON 本体の構築だけである場合、JSON 文字列が効率よく構築できるよう設計されている XPRIM_JsonWriter を利用してください。特に大きな JSON データの場合、XPRIM_JsonWriter を利用した方がパフォーマンスがずっと良く、メモリのフットプリントもより低く抑えられます。

例えば、XPRIM_JsonWriter を使って、次の JSON 文字列を構築したとします。

{
    "name":
    {
        "given":"John",
        "surname":"Smith"
    },
    "age":45,
    "contactNo":
    [
        { area:"02", no:"9378 2867", type:"landline" },
        { no:"0468 732 371", type:"mobile" }
    ]
}


最初に XPRIM_JsonWriter オブジェクトを作成します。

Define_Com Class(#XPRIM_JsonWriter) Name(#Writer)


ライターの出力モードを指定します。次の 3 種類の出力モードがサポートされています。

  • 文字列
  • ファイル
  • HTTP 要求本文

出力モードを指定するには、次のメソッドを使用します。

  • SetOutputToString
  • SetOutputToFile
  • SetOutputToHttpRequest


次の例では、文字列を生成するので、出力モードを String (文字列) に設定します。

#Writer.SetOutputToString

BeginObject (または BeginArray) を使って、ルート・オブジェクト (またはアレイ) を開始します。

#Writer.BeginObject

"name" メンバを書き込みます。この値はオブジェクトです。
BeginObjectName パラメータと共に使用して、オブジェクト・メンバを作成します。

#Writer.BeginObject Name('name')

JSON 文字列は次のようになります。

{
   "name":    
   {

次に "given" と "surname" メンバを書き込みます。

#Writer.WriteString Name('given') Value('John')
#Writer.WriteString Name('surname') Value('Smith')

name メンバ・オブジェクトを閉じます。

#Writer.EndObject

ここまでで、JSON 文字列は次のようになります。

{
   "name":    
   {
        "given":"John",
        "surname":"Smith"
    }

"age" メンバを書き込みます。

#Writer.WriteNumber Name('age') Value(45)

そして、"contactNo" メンバを書き込みます。これはアレイです。  BeginArray を使用します。

#Writer.BeginArray Name('contactNo')

次に最初の contactNo アイテムを書き込みます。これはオブジェクトなので、BeginObject を使います。  アレイ要素の書き込み時はインデックスを指定する必要はありません。これは、常に順番に書き込まれていくからです。

#Writer.BeginObject
#Writer.WriteString Name('area') Value('02')
#Writer.WriteString Name('no') Value('9378 2867')
#Writer.WriteString Name('type') Value('landline')
#Writer.EndObject

2 番目の contactNo アイテムを書き込みます。

#Writer.BeginObject
#Writer.WriteString Name('no') Value('0468 732 371')
#Writer.WriteString Name('type') Value('mobile')
#Writer.EndObject

contactNo アレイを閉じます。

#Writer.EndArray

ルート・オブジェクトを閉じます。

#Writer.EndObject

これで、AsString メソッドを使ってコンストラクト JSON 文字列にアクセスできるようになります。

#MyJsonString := #Writer.AsString

次は: XPRIM_RandomAccessJsonReader を使用した、JSON 値の読み込み

  • No labels