Haruyuki Mohri

毛利春幸のブログです。

org/json/JSONObjectでJSONを処理する

2017年12月7日 技術セミナー「その方法で大丈夫?今さら聞けないWindows 10ソフトウェア開発」


C++Builder 10.2を使ってAndroidorg/json/JSONObjectを試してみました。

#include <Androidapi.JNI.JavaTypes.hpp>
#include <Androidapi.Helpers.hpp>

上記のヘッダが必要です。

org/json/JSONObject

 // org/json/JSONObjectを使う
    _di_JJSONObject j1 = TJJSONObject::JavaClass->init(StringToJString(L"{\"Field1\":\"Japanese\"}"));
    j1->put(StringToJString("Field2"), _di_JObject(StringToJString(L"日本語")));
    j1->put(StringToJString("Field3"), 100);

JSONオブジェクトを作成して2つの項目を追加しています。

org/json/JSONArray

 // org/json/JSONArrayにj1を追加する
    _di_JJSONArray jaray = TJJSONArray::JavaClass->init();
    jaray->put(_di_JObject(j1));
    //[{"Field1":"Japanese","Field2":"日本語","Field1":100}] こんな感じのJSONが作られる
    Memo1->Lines->Append(JStringToString(jaray->toString()));

作成したJSONオブジェクトをJSONArrayに追記

org/json/JSONTokener

 // org/json/JSONTokenerを使う
    _di_JJSONTokener jtaken = TJJSONTokener::JavaClass->init(jaray->get(0)->toString());

    _di_JJSONObject jout =  TJJSONObject::JavaClass->init(jtaken->nextValue()->toString());

    Memo1->Lines->Append("");
    Memo1->Lines->Append(L"====== Field2 ======");
    //"Field2"だけを取り出す
    Memo1->Lines->Append(JStringToString(jout->getString(StringToJString(L"Field2"))));

作成したJSONオブジェクト内のField2だけを取り出しました。

f:id:mojeld:20171110174950g:plain