c - Json解析数据并通过提供key获取值

标签 c json

我有一个json格式的字符串。我正在使用jansson库。

{"ip": null, "hostname": null, "updated_at": 1507729189,"device_category": "Unknown", "device_name": "Unknown", "device_family": "Unknown", "mac": "005056bd7f9c", "added_at": 1507729189}

我需要获取与键对应的值。

json_t *data = NULL;
if(!(data = json_object_get((json_t *)&recvBuff->data, "mac")))
{
    status = ERROR;
    goto exit;
}
strcpy(client_data->clientMac, json_string_value(data));

在上面的代码中,我尝试获取 mac 地址值。但是在这里我遇到了问题,因为 json_object_get 接受 json 对象。但是recvBuff->data是uint8_t类型,它的值是我提供的字符串。所以我尝试了类型转换,但它不起作用。 无论如何,我可以将字符串转换为 json 对象并使用 json_object_get 吗?

最佳答案

首先需要告诉 jansson 将 JSON 字符串解析为层次结构以供进一步使用:

json_error_t error;
json_p = json_load_file(recvBuff->data, JSON_DISABLE_EOF_CHECK, &error);
if (json_p == NULL)
{
  LOG_PRINT(LOGLEVEL_ERROR, "Loading json string failed: %s - %s; pos=%u\n",
                             error.text, error.source, error.position);
  status = ERROR;
  goto _exit;
}

然后你可以尝试找到你的键/值对。这可以通过两种方式完成:

1)

int result;
char *mac_value_p = NULL;
result = json_unpack(json_p, "{s:s}", "mac", &mac_value_p);
if (result)
{
  status = ERROR;
  goto _exit;
}
// mac_value_p now points to a string holding the value.
strcpy(client_data->clientMac, mac_value_p);

对于“string”以外的其他值类型,您需要调整格式字符串“{s:s}”。 使用此方法,您还可以一次查询不同键的多个值。

2)

json_t *mac_p = NULL;
mac_p = json_object_get(json_p, "mac");
if (!mac_p || !json_is_string(mac_p))
{
  status = ERROR;
  goto exit;
}
// mac_p now points to a json_t object of type string.
strcpy(client_data->clientMac, json_string_value(mac_p));

关于c - Json解析数据并通过提供key获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46702188/

相关文章:

c - C 中结构指针出现段错误

c - 使用 set_usart_base((void *)) EVK1105 dev 时的隐式函数声明。木板。爱特梅尔

c++ - 内存压力下匿名mmap相对于malloc的优势

c - 在 C 语言中,为什么数组的地址等于它的值?

c - 指向 C 中函数解释的指针

java - JDK6 脚本引擎中是否有 "native"支持 JSON?

javascript - 从 json 对象而不是 json 加载 Tensorflowjs

ios - Google Maps API-如何从坐标获取最近的地名,而忽略非特定结果

python - json.dump 一个 concurrent.futures.Future()?

json - TensorFlow 将计算图导出为 XML、JSON 等