使用json-glib

时间:2017-02-07 04:44:39

标签: c json libcurl glib tizen

我无法检索使用curl从服务器收到的数组响应中包含的值:

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打印出以下内容:

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

我正在尝试打印出json数组中的值" timestamps"通过执行以下操作:

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。我需要这个,所以我可以正确地从服务器处理的原始数组中删除与这些值匹配的元素。

谢谢!

2 个答案:

答案 0 :(得分:0)

我会尝试返回64位int的json_node_get_int。这些对我来说不像双打。

答案 1 :(得分:0)

要正确打印整数键,需要使用格式字符串"%" G_GINT64_FORMAT而不是"%d"作为json_node_get_int()返回的值,因为它返回gint64 },而不是gint