JSONを読んでMessagePackで書きだすサンプルです。以下のようなことを行なっています。
-
JsonReader::Read()
を利用してJSON文字列からMpObject
を構築します。
-
MpWriter
をVectorOutputStream
に書き出すように初期化します。
-
JSONから変換した
MpObject
をMpWriter
を通じてMessagePack形式で書き出します。
以下がサンプルのソースコードになります。
using nlib_ns::msgpack::JsonReader;
using nlib_ns::msgpack::MpWriter;
using nlib_ns::msgpack::MpObject;
const char jsontext[] =
"{ \"item\": ["
"{\"itemCode\":91, \"itemName\" : \"ramen with salt based soup\", \"itemPrice\":300},"
"{\"itemCode\":94, \"itemName\" : \"ramen with miso based soup\", \"itemPrice\":290}, "
"{\"itemCode\":95, \"itemName\" : \"ramen with a pork bone broth\", \"itemPrice\":320} "
"] } ";
bool ReadJsonWriteMessagePack() {
MpObject obj;
if (JsonReader::ReadEx(&obj, jsontext) != 0) return false;
MpWriter writer;
ReallocOutputStream ostr;
writer.Init(&ostr);
writer.Write(obj);
writer.Close();
ostr.Flush();
if (!writer || !ostr) return false;
ReallocOutputStream::UniquePtrType data;
size_t size = ostr.Release(&data);
for (size_t i = 0; i < size; ++i) {
if (i % 16 == 0)
nlib_printf(
"\n%04x: ", static_cast<int>(i));
}
return true;
}
bool SampleMain(int, char**) { return ReadJsonWriteMessagePack(); }
NLIB_MAINFUNC