【D言語】std.jsonが使いづらい【Phobos】
先日、仕事でD言語を書いたのですが、ちょっとstd.jsonが使いづらくて困りました。
JSONValueを作り、そこからJSONのstringを作りたい時、 下のようなコードを書くことになります。
import std.json, std.stdio;
void main()
{
JSONValue json;
json.type = JSON_TYPE.OBJECT;
json.object["hoge"] = JSONValue();
json.object["hoge"].type = JSON_TYPE.STRING;
json.object["hoge"].str = "piyo";
json.object["pi"] = JSONValue();
json.object["pi"].type = JSON_TYPE.INTEGER;
json.object["pi"].integer = 3141592;
(&json).toJSON().writeln();
}
なぜtoJSONの引数がin JSONValue*
なのかが気になります。
in ref JSONValue
じゃダメなんでしょうか・・・
さらに、いちいちtypeを設定しないけないのが面倒くさいです。
このへんは、opAssignを定義すれば解決できそうです。
import std.stdio;
enum JSON_TYPE
{
STRING, INTEGER, OBJECT
}
struct JSONValue
{
union
{
string str;
long integer;
JSONValue[string] object;
}
JSON_TYPE type;
void opAssign(long v)
{
type = JSON_TYPE.INTEGER;
integer = v;
}
void opAssign(string v)
{
type = JSON_TYPE.STRING;
str = v;
}
}
void main()
{
JSONValue json;
json.type = JSON_TYPE.OBJECT;
json.object["hoge"] = "piyo";
json.object["pi"] = 3141592;
}
随分すっきりしました。
担当:美馬(すっきりするとは言っても、object関連はうまく行かなくて困る)