2017-10-12 45 views
-1

私はjson形式の文字列を持っています。私はjanssonライブラリを使用しています。Jsonがデータを解析してキーを提供することで値を取得する

{"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)); 

は、上記のコードでは、私はjson_object_getはJSONオブジェクトを受け入れるよう、ここで私が問題に直面していますMACアドレスvalue.Butを取得しようとしました。しかし、recvBuff->データはuint8_t型であり、その値は私が提供した文字列です。型キャストを試みましたが動作しませんでした。 文字列をjsonオブジェクトに変換してjson_object_getを使用できますか?

+0

json_loadsを見てみましょう –

答えて

1

まず、さらなる使用のために階層構造に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; 
} 

次に、あなたがあなたのキー/値のペアを見つけることを試みること。これは、2種類が行うことができます:「文字列」以外の値型の場合

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); 

あなたはフォーマット文字列"{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)); 
関連する問題