Untitled
unknown
c_cpp
a year ago
2.0 kB
12
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cjson/cJSON.h>
// Function to search for the key in the JSON object
void search_key(cJSON *json, const char *key) {
if (json == NULL) {
return;
}
if (cJSON_IsObject(json) || cJSON_IsArray(json)) {
cJSON *child = json->child;
while (child) {
// Compare the key with the child's key
if (child->string && strcmp(child->string, key) == 0) {
if (cJSON_IsString(child)) {
printf("Found key: %s, Value: %s\n", child->string, child->valuestring);
} else {
// Convert json object to string
char *json_str = cJSON_Print(child);
printf("Found key: %s, Value: %s\n", child->string, json_str);
}
}
// Continue the search recursively
search_key(child, key);
child = child->next;
}
}
}
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s <json_filename> <target_key>\n", argv[0]);
return 1;
}
const char *filename = argv[1];
const char *target_key = argv[2];
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fseek(file, 0, SEEK_END);
long length = ftell(file);
fseek(file, 0, SEEK_SET);
char *data = (char *)malloc(length + 1);
if (data == NULL) {
perror("Error allocating memory");
fclose(file);
return 1;
}
fread(data, 1, length, file);
data[length] = '\0';
fclose(file);
cJSON *json = cJSON_Parse(data);
if (json == NULL) {
printf("Error parsing JSON: %s\n", cJSON_GetErrorPtr());
free(data);
return 1;
}
// Display the JSON object
printf("JSON Object:\n%s\n", cJSON_Print(json));
search_key(json, target_key);
cJSON_Delete(json);
free(data);
return 0;
}
Editor is loading...
Leave a Comment