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 件のコメント:
コメントを投稿