[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT Plus, NO IDE]
string型をjson型データに変換する際、エスケープシーケンスを適切に前処理しないと変換に失敗します。
そこで前処理するescapeSequence関数を作成しました。内容についてはさらに詰める必要がありますが、今のところ私が使う範囲では正常に動作します。
C++で文字列を扱うと色々と泥沼にハマります。
ようやくOpenAIのアカウント管理ページに課金が反映されました。6日間それなりに使っても0.5ドル(70円)でした。お試し期間としてもらっている18ドルを使い切るのはまだまだ先のようです。値下げ前だったら10倍の700円ということを考えると激安もいいところです。
今日の夕方から急にAPIが重くなったりサーバ内部エラーになるのですが、トラフィックがきつくなってきたのでしょうか。
void escapeSequence(string& str){
size_t pos = 0;
while ((pos = str.find("\\", pos)) != string::npos) {
str.replace(pos, 1, "\\\\");
pos += 2;
}
pos = 0;
while ((pos = str.find('"', pos)) != string::npos) {
str.replace(pos, 1, "\\\"");
pos += 2;
}
pos = 0;
while ((pos = str.find("'", pos)) != string::npos) {
str.replace(pos, 1, "\'");
pos += 2;
}
pos = 0;
while ((pos = str.find('\n', pos)) != string::npos) {
str.replace(pos, 1, "\\n");
pos += 2;
}
pos = 0;
while ((pos = str.find('\t', pos)) != string::npos) {
str.replace(pos, 1, "\\t");
pos += 2;
}
pos = 0;
while ((pos = str.find('\b', pos)) != string::npos) {
str.replace(pos, 1, "\\b");
pos += 2;
}
pos = 0;
while ((pos = str.find('\f', pos)) != string::npos) {
str.replace(pos, 1, "\\f");
pos += 2;
}
}