2013年3月22日金曜日

C++でJSONを扱う件(3)

C++でJSONを扱う件(3)
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 件のコメント:

コメントを投稿