arrays - 在循环中创建数组和对象 - C
问题描述
我正在关注如何在 C 中使用 JSON 的本教程和库。
https://linuxprograms.wordpress.com/2010/08/19/json_object_new_object/
我必须处理已经开发的代码,所以我不能更改库等。这是我需要开发的代码;基本上我需要创建一个具有不同 varName 的 JSON 文件,并用数组填充它(每个 varName 都有自己的数组):
#include <json/json.h>
#include <stdio.h>
int main() {
/*Creating a json object*/
json_object *jobj = json_object_new_object();
/*Creating a json array*/
json_object *jarray = json_object_new_array();
json_object *jarray2 = json_object_new_array();
/*Creating json strings*/
json_object *jstring1 = json_object_new_string("10");
int j = 0;
char num[5];
char num2[5];
for (j = 0; j < 3; j++) {
sprintf(num, "%d", j);
printf("num % s\n", num);
jstring1 = json_object_new_string(num);
json_object_array_add(jarray, jstring1);
sprintf(num2, "%d", j + 50);
printf("num2 % s\n", num2);
jstring1 = json_object_new_string(num2);
json_object_array_add(jarray2, jstring1);
}
/*Form the json object*/
char *varName[] = { "categories", "stories" };
/*what if I have N i.e. 1000 varName element ???
how to put this in a loop
varName[i], could have different values */
json_object_object_add(jobj, varName[0], jarray);
json_object_object_add(jobj, varName[1], jarray2);
...
//json_object_object_add(jobj, varName[N], jarrayN); ?? how to do this in a loop ??
/*Now printing the json object*/
printf("The json object created: %s\n", json_object_to_json_string(jobj));
}
这个打印:
The json object created: { "categories": [ "0", "1", "2" ], "stories": [ "50", "51", "52" ] }
哪个很好,但是如何在循环语句中执行此操作?我可以有许多 varName 元素,每个元素都有一个具有不同值的单独数组。
当然,我不能创建 N *jarray1 到 *jarrayN 并与 相同,因为我从一开始就不知道 N。
json_object_object_add(jobj, varName[0], jarray);
json_object_object_add(jobj, varName[N], jarrayN);
希望我的问题很清楚
解决方案
您是否正在寻找类似的东西?
#include <json-c/json.h>
#include <stdio.h>
#include <string.h>
static json_object *build_array(const char *var_name) {
printf("Building array for %s...\n", var_name);
json_object *array = json_object_new_array();
for (int j = 0; j < strlen(var_name); j++) {
char num[8];
sprintf(num, "%d", j);
json_object_array_add(array, json_object_new_string(num));
}
return array;
}
int main() {
json_object *root_obj = json_object_new_object();
// since we might not know the length of this array beforehand,
// a NULL string shall denote the last element.
char *var_names[] = {"categories", "stories", "cats", "dogs", NULL};
for (char **var_name_ptr = var_names; *var_name_ptr; var_name_ptr++) {
char *var_name = *var_name_ptr;
json_object *array = build_array(var_name);
json_object_object_add(root_obj, var_name, array);
}
printf("The json object created: %s\n", json_object_to_json_string(root_obj));
json_object_put(root_obj); // Release the root object
}
输出是
Building array for categories...
Building array for stories...
Building array for cats...
Building array for dogs...
The json object created: { "categories": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ], "stories": [ "0", "1", "2", "3", "4", "5", "6" ], "cats": [ "0", "1", "2", "3" ], "dogs": [ "0", "1", "2", "3" ] }
推荐阅读
- sql - 带有 SQL 的 Excel VBA:指定 Where 子句时不返回行
- python - Plotly-Dash Graph - 显示在形状后面的文本注释
- jsonnet - jsonnet - 从数组中删除空值
- regex - 如何为字符串在正则表达式中包含引号的两个组捕获两种模式(如果存在)
- c# - 使用 DirectLine SDK 和 Xamarin 的高延迟(2-4 秒)机器人响应时间
- python - 在熊猫数据框中移动数据
- python - 在 python 中运行 adb 管道命令
- c# - .NET Int16 限制小于 Oracle 中的 NUMBER(5, 0) 限制
- multithreading - 为什么 Executor.asCoroutineDispatcher 不像 newFixedThreadPoolContext 那样工作?
- angular - D3,Typescript - 'this' 类型的参数不可分配给'BaseType' 类型的参数