JSONファイルそのものをどうやって読めばいいのかって点ですが。。。
ところで話は変わって、【オブジェクト指向】ってあるじゃないですか。
よく、直感的に、思考に近い形でとか言いますよね。
CODINGは、要するに、object指向かどうかが問題なのではなくて、
頭でわかりやすいかどうかです。
単純なものほどわかりやすいのは至極当然。
よって、TREE構造のものを読み込むことを考えたときに、、
全て展開したTREEを、上から1行ずつ読み込んでいくような、そんな感じで読み込みましょう。
ポイントは、いくつかの文字の判定とその分岐です。
考えるのは、、
【"】【:】【{】【}】【[】【]】【,】
の7つだけです。
といったところで、こんな感じでつくってみました。
★
//wpは文字列の配列 for(int w=0;wp[w]!=0;w++){ if(ダブルクォーテーション){ //----------------------------- if(bIn){ // ここで文字列が終わるので、文字列の特定 } //----------------------------- else{ // 文字列の始まりを憶えて置く } //----------------------------- bIn = ! bIn; } if(bIn) continue;//次へ else if(コロン){ // 【:】 // キーを確定させる // 値の開始位置を覚える } else if(中カッコ開始){ // 【{】 // 現在のobjectをPUSHする // 現在のobjectの下にobjectを生成してそれを現在のobjectにする } else if(中カッコ終了){ // 【}】 //キーと値を調べて、少なくとも値があったら現在のobjectに登録 //キーは無い場合もある //現在のobjectをひとつPOPする } else if(大カッコ開始){ // 【[】 // 現在のobjectをPUSHする // 現在のobjectの下にobjectを生成してそれを現在のobjectにする } else if(大カッコ終了){ // 【]】 //キーと値を調べて、少なくとも値があったら現在のobjectに登録 //キーは無い場合もある //現在のobjectをひとつPOPする } else if(カンマ){ // 【,】 //キーと値を調べて、少なくとも値があったら現在のobjectに登録 //キーは無い場合もある } //----------------------------- } /* ポイント 文字列を判断すること キーと値を判断すること */まぁ、昔ながらのよくある方法ですが、文字列の始まりの【"】のところを憶えておき、終わりの【"】の部分に\0を突っ込んで、char*(wchar_t*)で読むっていう算段です。
値については、【"】ではじまるかどうかで、文字列かどうかを判定するわけですね。
もちろん、このLOOPに入る前に、\\と\"をなんらかの方法で退避させ、値をobjectに登録するときに戻してやりますよ。。
たぶん、つづく。。。
0 件のコメント:
コメントを投稿