i am trying to parse a json array,i am facing problem.

My array is like this:

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] }], 

i am able to access medication array and print total array,but not able to access objects inside array. can you pls suggest any solution or any example to do this using C language?

MyCode

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); } 

Regards, Lenin.

6

3 Answers

You need to access the inner array using a json_object * variable.

Try this:

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)); } 
7

You can use the jsoncpp to do this job. Array as a Json::Value, you can

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 } 

I hope will help you.

0

If you want to access the array as a json object, you should get it as a json_object* but not a array_list*

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy