I am currently having issues adding additional values to an array of objects.
The iteration seems to work somehow,
but I think I have to use the cjson_arrayforeach function differently
or get rid of some loops.
This my experimental code:
<code> cJSON *json = cJSON_Parse(buffer);
if (json == NULL) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) {
printf("Error: %sn", error_ptr);
}
cJSON_Delete(json);
return 1;
}
cJSON *iterate = NULL;
cJSON *iterate = NULL;
cJSON_ArrayForEach(iterate,json) {
int count = 0 ;
while(count == 0) {
cJSON *valuea = cJSON_GetObjectItemCaseSensitive(iterate,"valuea");
cJSON *valueb = cJSON_GetObjectItemCaseSensitive(iterate, "valueb");
for(int a = 0; a < cJSON_GetArraySize(json);a++) {
if(cJSON_IsNumber(valuea)&&cJSON_GetNumberValue(valueb)==58) {
int va = valuea->valueint;
int va1 = va >> 8;
int va2 = va & 256;
if(a == 0) {
cJSON_AddNumberToObject(json->child,"va1",va1);
cJSON_AddNumberToObject(json->child,"va2",va2);
}
else {
cJSON_AddNumberToObject(json->child->next,"va1",va1);
cJSON_AddNumberToObject(json->child->next,"va2",va2);
}
}
}
count++;
}
}
</code>
<code> cJSON *json = cJSON_Parse(buffer);
if (json == NULL) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) {
printf("Error: %sn", error_ptr);
}
cJSON_Delete(json);
return 1;
}
cJSON *iterate = NULL;
cJSON *iterate = NULL;
cJSON_ArrayForEach(iterate,json) {
int count = 0 ;
while(count == 0) {
cJSON *valuea = cJSON_GetObjectItemCaseSensitive(iterate,"valuea");
cJSON *valueb = cJSON_GetObjectItemCaseSensitive(iterate, "valueb");
for(int a = 0; a < cJSON_GetArraySize(json);a++) {
if(cJSON_IsNumber(valuea)&&cJSON_GetNumberValue(valueb)==58) {
int va = valuea->valueint;
int va1 = va >> 8;
int va2 = va & 256;
if(a == 0) {
cJSON_AddNumberToObject(json->child,"va1",va1);
cJSON_AddNumberToObject(json->child,"va2",va2);
}
else {
cJSON_AddNumberToObject(json->child->next,"va1",va1);
cJSON_AddNumberToObject(json->child->next,"va2",va2);
}
}
}
count++;
}
}
</code>
cJSON *json = cJSON_Parse(buffer);
if (json == NULL) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) {
printf("Error: %sn", error_ptr);
}
cJSON_Delete(json);
return 1;
}
cJSON *iterate = NULL;
cJSON *iterate = NULL;
cJSON_ArrayForEach(iterate,json) {
int count = 0 ;
while(count == 0) {
cJSON *valuea = cJSON_GetObjectItemCaseSensitive(iterate,"valuea");
cJSON *valueb = cJSON_GetObjectItemCaseSensitive(iterate, "valueb");
for(int a = 0; a < cJSON_GetArraySize(json);a++) {
if(cJSON_IsNumber(valuea)&&cJSON_GetNumberValue(valueb)==58) {
int va = valuea->valueint;
int va1 = va >> 8;
int va2 = va & 256;
if(a == 0) {
cJSON_AddNumberToObject(json->child,"va1",va1);
cJSON_AddNumberToObject(json->child,"va2",va2);
}
else {
cJSON_AddNumberToObject(json->child->next,"va1",va1);
cJSON_AddNumberToObject(json->child->next,"va2",va2);
}
}
}
count++;
}
}
And this is what was added to my JSON file
<code>[{ "valuea": 5434, "Bytes": 1,
"valueb": 58, "va1": 21,
"va2": 256, "va1": 240, "va2": 0 },
{ "valuea": 61578, "Bytes": 1, "valueb": 58,
"va1": 21, "va2": 256, "va1": 21,
"va2": 256, "va1": 240, "va2": 0,
"va1": 240, "va2": 0 }, { "valuea": 61258,
"Bytes": 2, "valueb": 56 }]
</code>
<code>[{ "valuea": 5434, "Bytes": 1,
"valueb": 58, "va1": 21,
"va2": 256, "va1": 240, "va2": 0 },
{ "valuea": 61578, "Bytes": 1, "valueb": 58,
"va1": 21, "va2": 256, "va1": 21,
"va2": 256, "va1": 240, "va2": 0,
"va1": 240, "va2": 0 }, { "valuea": 61258,
"Bytes": 2, "valueb": 56 }]
</code>
[{ "valuea": 5434, "Bytes": 1,
"valueb": 58, "va1": 21,
"va2": 256, "va1": 240, "va2": 0 },
{ "valuea": 61578, "Bytes": 1, "valueb": 58,
"va1": 21, "va2": 256, "va1": 21,
"va2": 256, "va1": 240, "va2": 0,
"va1": 240, "va2": 0 }, { "valuea": 61258,
"Bytes": 2, "valueb": 56 }]
There should be just one line of va1 & va2 per object.
I am trying to modify a JSON in C and want to do a calculation for each JSON object.
But the loop runs multiple times.