2017-02-07 3 views
0

を使用してJsonArray *に含まれている数字を取得できません:は、私はカールを使用して、サーバから受信アレイ応答に含まれる値を取得することができませんJSON-glibの

struct string data; 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data); //response from the server is written to data 
curl_easy_perform(curl); 
dlog_print(DLOG_DEBUG, LOG_TAG, "%s", data.len, data.ptr); 

私が正常に応答し、上記DLOGを取得します私は、次の手順を実行して、JSON配列「タイムスタンプ」の値を印刷しようとしています

{"timestamps":[1486371362000,1486371422000,1486371482000]} 

::次のように出力さ

JsonParser *parser = json_parser_new(); 
g_type_init(); 
json_parser_load_from_data(parser, data.ptr, data.len, &error); 
JsonNode *root = json_parser_get_root(parser); 
JsonObject *obj = json_node_get_object(root); 
JsonArray *array = (JsonArray*)json_object_get_array_member(obj,"timestamps"); 
json_array_foreach_element(timestamps, forEachJsonElement, NULL); 

マイforEachJsonElement機能は以下に定義される:

void forEachJsonElement(JsonArray *array, guint index, JsonNode *element_node, gpointer user_data){ 
    dlog_print(DLOG_DEBUG, LOG_TAG, "forEachJsonElement index: %d", index); 
    dlog_print(DLOG_DEBUG, LOG_TAG, "forEachJsonElement value: %f", json_node_get_double(element_node)); 
} 

dlogs印刷:

forEachJsonElement index: 0 
forEachJsonElement value: 0.000000 
forEachJsonElement index: 1 
forEachJsonElement value: 0.000000 
forEachJsonElement index: 2 
forEachJsonElement value: 0.000000 

私の質問は、なぜこれらの値は常にjson_node_get_double使用して0をプリントアウトしますか?最初のdlogに表示されている値1486371362000、1486371422000、および1486371482000を正しく取得するにはどうすればよいですか。私はjson_node_get_intとjson-glibライブラリで私が利用できると思うことがあるものはすべて試しましたが、json_node_get_doubleは常に0.00000を返します。私はこれが必要なので、サーバーが処理した元の配列からこれらの値に一致する要素を適切に削除できます。

ありがとうございました!

答えて

0

64bit intを返すjson_node_get_intを試してみます。これらは私に二倍のように見えません。

0

、正しくはgint64を返すよう、json_node_get_int()から返された値のために代わりに"%d"の使用するために必要なフォーマット文字列"%" G_GINT64_FORMAT、ないgintを印刷する整数キーを取得します。

関連する問題