首页 > 解决方案 > 在循环中创建数组和对象 - 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);

希望我的问题很清楚

标签: arrayscjsonlinux

解决方案


您是否正在寻找类似的东西?

#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" ] }

推荐阅读