私は C++ を初めて使用し、文字列からさまざまなデータを削除して JSON として解析する方法を理解できません。
私が見つけた最も文書化された JSON パーサー、jansson を使用することになりました。私は最初のハードルで立ち往生していますが、それは素晴らしいようです。
私のプログラムは、次の形式の文字列を受け取ります。
5::/chat:{"name":"steve","args":[{"connection":"true"}, { "chatbody" : "I am the body" }]}
中括弧の外側はすべて次のように削除しました。
std::string str=message;
unsigned pos = str.find("{");
std::string string = str.substr (pos);
それは残します:
{
"name": "steve",
"args": [
{
"connection": "true"
},
{
"chatbody": "I am the body"
}
]
}
これを解析するステージ1で立ち往生しています。文字列を char に変換してから json_loads を使用しようとしましたが、何も役に立ちません...
全体は次のようになります。
void processJson(string message)
{
json_t *root;
json_error_t error;
size_t i;
std::string str=message;
unsigned pos = str.find("{");
std::string str3 = str.substr (pos);
const char * c = str.c_str();
json_t *data, *sha, *name;
root = json_loads(c, 0, &error);
data = json_array_get(root, i);
cout << data;
if(!json_is_object(root))
{
fprintf(stderr, "error: commit data %d is not an object\n", i + 1);
}
}
値を取得する必要がありますが、取得するのは 01、02、03 だけです....
is_json_object は次のように述べています。
error: commit data 1068826 is not an object
error: commit data 1068825 is not an object
error: commit data 1068822 is not an object
私は何を間違っていますか?どうすればこれを適切にフォーマットできますか? 最終的には配列を反復処理する必要がありますが、これを乗り越えることはできません。これは単なる初心者の間違いだと確信しています。
-編集-
厳密なサイズ要件のため、Boost の使用を避けようとしています。