2017-05-19 28 views
1

私はjsonオブジェクトの配列を繰り返し、特定の要素を別の要素に入れています。json配列から別のjson配列へのオブジェクトのコピー

char *jsonString = getList(); // reads file and returns json string 
json_error_t err; 
json_t *jsonArr = json_loads(jsonString , 0 , &err); 
int index = 0; 
json_t *value = NULL; 
json_t *resultArr = malloc(sizeof(json_t) * 100); 

json_array_foreach(jsonArr , index , value) 
{ 
    if(strcmp(json_string_value(json_object_get(value , "citizenship")) , key) == 0) 
    { 
     json_array_append_new(resultArr , value); 
    } 
} 

printf("Array size : %i\n" , (int)json_array_size(resultArr)); 

char * result = json_dumps(resultArr , JSON_INDENT(2)); 
json_decref(jsonArr); 
json_decref(resultArr); 

return result; 

私はループが、この新しく作成された配列が空であることを述べていた後、私は検索に一致する3つの要素を持っているといえprintfの()それは、if文のエントリの数で真の判定であることを確信しています。あなたが指摘できる明らかな問題はありますか?私はjanssonライブラリを使用しています。

+0

「json_array_append_new」と「json_array_append」を使用する理由は何ですか?また、戻り値をmallocやappendのような呼び出しにチェックし、エラーがないことを確認してください。 – Kcvin

+0

また、 'json_t * resultArr = json_array(); 'を使用してください。 – Kcvin

+0

ありがとう、json_array()はトリックを行いました! –

答えて

1

コメントに記載されているように、json_array()を使用してjson_tの配列を作成する必要があります。

see some good examplesは、Janssonの著者がGitHubで持っているテストを見てください。

関連する問題