c语言中的json数组解析

c语言中的json数组解析,c,arrays,json,parsing,C,Arrays,Json,Parsing,我正试图解析一个json数组,我遇到了一个问题 我的数组是这样的: configure: { "id": 4, "userId": 107, "deviceMacAddress": "00:06:66:30:02:3C", "medication": [{ "id": 11, "version": 18, "name": "name1", "unit": "mg", "forMed": "for1", "schedule": [1]

我正试图解析一个json数组,我遇到了一个问题

我的数组是这样的:

configure: {
  "id": 4,
  "userId": 107,
  "deviceMacAddress": "00:06:66:30:02:3C",
  "medication": [{
    "id": 11,
    "version": 18,
    "name": "name1",
    "unit": "mg",
    "forMed": "for1",
    "schedule": [1]
  }, {
  "id": 45,
  "version": 1,
  "name": "sdga",,
  "unit": "mg",
  "forMed": "54234",
  "schedule": [0,1,2,3,4,5,6]
  }],
我可以访问阵列和打印总阵列,但不能访问阵列中的对象。 你能推荐一些解决方案或例子来使用C语言吗

麦可德

int main(int argc, char **argv) {
  struct json_object *med_obj, *medi_obj, *tmp1_obj;
  struct array_list *lArray;
  charname[10] = {0};
  static const char filename[] = "xyz.txt";
  med_obj = json_object_from_file(filename);
  medi_obj = json_object_object_get(med_obj, "medication");
  lArray = json_object_get_array(medi_obj);
  tmp1_obj = json_object_object_get(medi_obj, "name");
  strcpy (name,json_object_to_json_string(tmp1_obj));
  printf("name=%s\n",name);
}
问候,,
列宁。

您可以使用jsoncpp来完成这项工作。 数组作为Json::值,您可以

medicationValue = jsonObject[medicationKey];
Json::Value::Members member;
member = medicationValue .getMemberNames();

for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++) {
    the element of medication here
}

我希望能对您有所帮助。

如果您想以json对象的形式访问该数组,那么应该以json对象的形式获取它,而不是数组列表*

struct json_object *lArray; 
...
lArray=json_object_get(medi_obj); 
tmp1_obj = json_object_object_get(json_object_array_get_idx(lArray, 0), "name");

您需要使用
json\u对象*
变量访问内部数组

试试这个:

struct json_object *med_obj, *medi_array, *medi_array_obj, *medi_array_obj_name;
int arraylen, i;
charname[10] = {0};
static const char filename[] = "xyz.txt";
med_obj = json_object_from_file(filename);
medi_array = json_object_object_get(med_obj, "medication");

// medi_array is an array of objects
arraylen = json_object_array_length(medi_array);

for (i = 0; i < arraylen; i++) {
  // get the i-th object in medi_array
  medi_array_obj = json_object_array_get_idx(medi_array, i);
  // get the name attribute in the i-th object
  medi_array_obj_name = json_object_object_get(medi_array_obj, "name");
  // print out the name attribute
  printf("name=%s\n", json_object_get_string(medi_array_obj_name));
}
struct json\u object*med\u obj、*medi\u array、*medi\u array\u obj、*medi\u array\u obj\u name;
内阿莱伦,i;
charname[10]={0};
静态常量字符文件名[]=“xyz.txt”;
med_obj=json_object_from_文件(文件名);
medi_array=json_object_object_get(med_obj,“药物”);
//medi_数组是一个对象数组
arraylen=json\u object\u array\u length(medi\u array);
对于(i=0;i
我们可以看看您到目前为止编写了哪些代码来帮助您提出前进方向的建议吗?这是无效的JSON.MyCode:int main(int argc,char*argv){struct JSON_objectmed_obj,*medi_obj,*tmp1_obj;struct array_list*lArray;charname[10]={0};static const char filename[]=“xyz.txt”med_obj=json_object_from_file(文件名);medi_obj=json_object_object_get(med_obj,“药物”);lArray=json_object_get_数组(medi_obj);tmp1_obj=json_object_object_get(medi_obj,“名称”);strcpy(名称,json_object_to_字符串(tmp1_obj));printf(“名称=%s\n”,name);您好,我已经输入了代码,您能检查并建议任何解决方案吗?@Aiias我已经输入了代码,您能检查并建议任何解决方案吗?谢谢Aiias,它正在工作。每当尝试访问数组中的对象时,我都会面临新问题(例如:我的示例中的名称)所有名为的值都正在打印。我只需要特定的值。您能建议任何解决方案吗?再次感谢您的帮助。Hi@Aiias正在打印对象(例如:我的数组中的名称)我得到了所有带有名字的值,我只想打印带有名字标签的某些值。你能推荐一些吗solution@leninT.mohan-您获取名为
的所有值是什么意思?目前我们正在数组中循环。如果您只需要数组中的第一个对象,请不要使用
for
循环和instead只需执行
medi\u array\u obj=json\u object\u array\u get\u idx(medi\u array,0);
Hi@Aiias我需要所有对象值,但我必须在不同的行中打印每个值(即第1行中的“name”=1,第二行中数组中下次出现对象“name”,以此类推,最多打印10次).现在当我打印时,它们是在一行中打印的。我如何以相同的方式读取所有对象并打印它们?请在我以前的帖子中检查我的代码。谢谢reply@leninT.mohan-您是说
printf(“name=%s\n”,json\u object\u get\u string(medi\u array\u obj\u name));
不会打印多行吗?
“\n”
换行符应中断到下一行。请尝试在
=
\n
之间添加空格。