JSON的C代码示例

以前用json,因为方便都指定子串,所以没有用到库。这次还是使用公用库,也许内容复杂。

其实要讲解析,这个正是吾最擅长的。

  • 产生json
int main(int argc, char* argv[])
{
    int count = 0;

    while (count < 10)
    {
        char message[128];

        usleep(100*1000);
        count ++;

        struct json_object *json = json_object_new_object();
        sprintf(message, "value %d", count);
        json_object_object_add(json, "text", json_object_new_string(message));
        json_object_object_add(json, "int",  json_object_new_int(count));

        struct json_object *array = json_object_new_array();
        sprintf(message, "array %d", count);
        json_object_array_add(array, json_object_new_string(message));
        sprintf(message, "array %d", count*2);
        json_object_array_add(array, json_object_new_string(message));

        json_object_object_add(json, "array", array);

        char *string = json_object_to_json_string(json);
        //mqtt_publish(LOCAL_IP, string);
    }

    return 0;
}
  • 解析json

/**
 可以递归输出。
 不过并无必要,需要什么获取什么。
 */
static void mqtt_json_print(const char *sname, const json_object * pval)
{
    enum json_type type;

    if (NULL == pval)
    {
        return;
    }

    /*
    json_type_null,
    json_type_boolean,
    json_type_double,
    json_type_int,
    json_type_object,
    json_type_string,*/

    type = json_object_get_type(pval);
    switch(type)
    {
        case json_type_string:
            printf("Key:%s  value: %s\n", sname, json_object_get_string(pval));
            break;

        case json_type_int:
            printf("Key:%s  value: %d\n", sname, json_object_get_int(pval));
            break;

        case json_type_array:
            break;

        default:
            break;
    }
    return;
}

static void  mqtt_json_get_print(json_object * jobj, const char *sname)
{
    json_object *pval = json_object_object_get(jobj, sname);

    if (NULL != pval)
    {
        mqtt_json_print(sname, pval);
    }
    return;
}

static int mqtt_msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
    char* payloadptr = (char*)message->payload;
    payloadptr[message->payloadlen] = 0;

    GH_LOG_INFO("topic=%s, msg=%s, size=%d", topicName, payloadptr, message->payloadlen);

    json_object *parsed_object= json_tokener_parse(payloadptr);

    //json_object_object_get_ex(parsed_object, "text", &value);
    mqtt_json_get_print(parsed_object, "text");

    json_object_object_foreach(parsed_object, key, value)
    {
        mqtt_json_print(key, value);
    }

    MQTTClient_freeMessage(&message);
    MQTTClient_free(topicName);

    return MQTT_MSG_PROCESSED;
}

猜你喜欢

转载自blog.csdn.net/quantum7/article/details/82970864
今日推荐