Skip to content

Commit 7ab7c5a

Browse files
author
Joe Andolina
committed
Added cJSON_Duplicate to found items.
1 parent 1da9978 commit 7ab7c5a

File tree

1 file changed

+72
-7
lines changed

1 file changed

+72
-7
lines changed

src/JSONVar.cpp

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -445,32 +445,97 @@ bool JSONVar::hasPropertyEqual(const String& key, const JSONVar& value) const
445445

446446
//---------------------------------------------------------------------
447447

448+
// JSONVar JSONVar::filter(const char* key, const char* value) const {
449+
// JSONVar item;
450+
// cJSON* test;
451+
// cJSON* json = cJSON_CreateArray();
452+
453+
// Serial.printf("JSONVar::filter - %s == %s\n", key, value);
454+
455+
// // if(!cJSON_IsArray(_json)){
456+
// // // target = cJSON_CreateArray();
457+
// // // cJSON_AddItemToArray(target, _json);
458+
// // return (*this);
459+
// // }
460+
461+
// // Serial.printf("JSON SIZE %d", cJSON_GetArraySize(_json));
462+
463+
// Serial.printf("This an array %d\n", (*this).length());
464+
465+
// for (int i = 0; i < (*this).length(); i++) {
466+
// Serial.println("GettingItem");
467+
// item = this[(int)i];
468+
// Serial.println(item);
469+
// Serial.println(item[(const char*)key]);
470+
// Serial.println("GotItem");
471+
472+
// // Serial.println("Loop " + String(i));
473+
// // Serial.println(this->operator[](i));//cJSON_GetArrayItem(_json, i);
474+
475+
// // if (item == NULL) {
476+
// // Serial.println("Loop Null");
477+
// // continue;
478+
// // }
479+
480+
// if(item.hasPropertyEqual(key, value)){
481+
// Serial.println("Got Match");
482+
// return item;
483+
// }
484+
// else {
485+
// Serial.println("NO Match");
486+
// }
487+
// }
488+
489+
// if(cJSON_GetArraySize(json) == 0){
490+
// Serial.println("Returning Null");
491+
// return NULL;
492+
// }
493+
// else if(cJSON_GetArraySize(json) == 1){
494+
// Serial.println("Returning Single");
495+
// return JSONVar(cJSON_GetArrayItem(json, 0), (*this)._json);
496+
// }
497+
498+
// // Serial.println("Returning Array");
499+
// return JSONVar();
500+
// }
501+
448502
JSONVar JSONVar::filter(const char* key, const char* value) const {
449503
cJSON* item;
450504
cJSON* test;
451505
cJSON* json = cJSON_CreateArray();
452506

453-
if(JSONVar::typeof_((*this)) != "array"){
454-
test = cJSON_GetObjectItemCaseSensitive(_json, key);
507+
Serial.printf("JSONVar::filter - %s == %s\n", key, value);
508+
509+
if(!cJSON_IsArray(_json)){
510+
test = cJSON_GetObjectItem(_json, key);
511+
455512
if(test != NULL && strcmp(value, test->valuestring) == 0){
456-
cJSON_AddItemToArray(json, _json);
513+
return JSONVar(cJSON_Duplicate(item,true), _json);
457514
}
458-
return JSONVar(json, _json);
459515
}
460516

461-
for (int i = 0; i < cJSON_GetArraySize(_json); ++i) {
517+
for (int i = 0; i < cJSON_GetArraySize(_json); i++) {
462518
item = cJSON_GetArrayItem(_json, i);
519+
463520
if (item == NULL) {
464521
continue;
465522
}
466523

467-
test = cJSON_GetObjectItemCaseSensitive(item, key);
524+
test = cJSON_GetObjectItem(item, key);
468525

469526
if(test != NULL && strcmp(value, test->valuestring) == 0){
470-
cJSON_AddItemToArray(json, item);
527+
cJSON_AddItemToArray(json, cJSON_Duplicate(item,true));
471528
}
472529
}
473530

531+
if(cJSON_GetArraySize(json) == 0){
532+
return JSONVar(NULL, NULL);
533+
}
534+
535+
if(cJSON_GetArraySize(json) == 1){
536+
return JSONVar(cJSON_GetArrayItem(json, 0), _json);
537+
}
538+
474539
return JSONVar(json, _json);
475540
}
476541

0 commit comments

Comments
 (0)