Edited at

D言語でJSONを扱う ~弱小PHPerのD言語挑戦記5~

More than 3 years have passed since last update.


D言語でもJSONを扱いたい

DでJSONを扱うときのちょっとしたメモみたいなものはすでにありますが、PHPと対比させながら見ていきます


もし好ましくない書き方や、間違いがあればコメントでお知らせください


基本

std.jsonに必要なものがすべてありますので、importします

import std.json, std.file;

void main(){
auto jsonText = read("hoge.json");

//jsonを取り込む
auto jsonObj = parseJSON(jsonText);
}

これで、PHPで言うjson_decode()と同じことができます

要素へのアクセスもPHPと似ていて

jsonObj["anyKey"];

でアクセスできます

PHPで言うjson_decode()の第二引数をtrueにした時と同じですね

同じく、オブジェクトをjson文字列にするには

auto jsonText = toJSON(jsonObj);

で、できます

オブジェクトに値を入れるには

    //初期化時にまとめて

JSONValue jsonObj = [
"hoge" : "foo",
"D言語君" : "かわいい"
];

//後から値を追加(後述しますが、型をきちんと決めないといけません)
jsonObj["Dlang-man"].str = "D言語君かわいい!";
//こんな風にも書き込めます
jsonObj.object["flontier"].integer = 2059;


PHPと違うところ

PHPはいろんなものが動的にいい感じに処理されますが、D言語は静的でコンパイル時にいろいろ決まります

ので、型に関してはPHPと比べて(当たり前ですが)しっかりとやらないとコンパイルが通りません

    //文字列の場合

auto str = jsonObj["anyValue"].str;

//整数の場合
auto integer = jsonObj["anyValue"].integer;

//符号なし整数の場合
auto uInteger = jsonObj["anyValue"].uinteger;

//小数の場合
auto floating = jsonObj["anyValue"].floating;

if(jsonObj["anyValue"].isNull){
//値がnullの際の処理
}

foreach(key; jsonObj.array){
//.arrayメソッドで配列としてアクセス可能に
}

また、キーが存在するかどうか(PHPのin_array())も

if("anyValue" in jsonObj){

//"anyValue"キーが存在する場合...
}

で、できます

その他、詳しくはstd.jsonの公式レファレンスでどうぞ

ここに書いてあることで大体は大丈夫と思います

最初にも書きましたが、間違ってる点や好ましくない書き方をしている場合は是非コメントで教えてもらえると嬉しいです

この記事がプログラム初心者&&D言語初心者の人のためになれば幸いです