2016-11-07 17 views
0

私はCのjson配列を解析する方法について知りました。私はcJSONがCの使用方法を解析する方法を知っていますが、json配列を解析する方法についてGoogleで結果を見つけることはできません。私はUsing cJSON to read in a JSON arrayを見ました。私には合いません。 cJSONがjson配列を解析する方法は?

は、私は、Web APIからJSON配列をrecive、それは次のようになります。ご覧のとおり

[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}] 

、配列内の多くのJSONがあるので、どのように私はcJSON libに持つ配列を解析することができますか?

+0

サンプルが有効なJSONではありません。基本的に、バックスラッシュはすべて無効です。これはartifcatがCスタイルのエスケープ文字列を表示するデバッガからコピーするのですか? – Codo

+0

はい、私はgdbからコピーします。カールを使ってデータをダウンロードすると、 "\"はありません。 –

+0

[{"id": "6792"、 "date": "2010-01-29"、 "name": "Discuz!6.0.0クロスサイトスクリプティング"}、{"id": "7570"、 "date": "2009-09-17"、 "name" Discuz!プラグインCrazy Star <= 2.0(fmid)SQLインジェクションの脆弱性 "}、{" id ":" 7619 "、" date ":" 2009-09-15 "、" name ":" Discuz!JiangHuプラグインバージョン1.1および( "id": "7779"、 "date": "2009-08-25"、 "name": "Discuz 6.0(2fly_gift.php)SQLインジェクションの脆弱性"}、{"id" : "7878"、 "date": "2009-08-19"、 "name": "Discuz!リモートリセットユーザーパスワードエクスプロイト"} –

答えて

1

cJSONは、JSON配列とオブジェクトの両方のフルレンジをサポートしています。データにアクセスするときは、現在の作品の種類を理解するだけで済みます。

あなたの場合、単純な値を含むオブジェクトを含む配列です。だからこれはあなたがそれを扱う方法です:

int i; 
cJSON *elem; 
cJSON *name; 
char *json_string = "[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}]"; 
cJSON *root = cJSON_Parse(my_json_string); 
int n = cJSON_GetArraySize(root); 
for (i = 0; i < n; i++) { 
    elem = cJSON_GetArrayItem(root, i); 
    name = cJSON_GetObjectItem(elem, "name"); 
    printf("%s\n", name->valuestring); 
} 

私はそれを編集していません。あまり遠く離れていないことを願っています。

+0

ありがとう、あなたのソリューションは突然啓発され、そしてすぐに非常に感謝します。 –