|
@@ -62,10 +62,22 @@ void add_value(JsonEncoder* this, char* str){
|
|
|
|
|
|
void add_string(JsonEncoder* this, char* key, char* val){
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + strlen(val) + 4 + 2 + 1; //clef + val + 4 guillemet + ": " + \0
|
|
|
+ int index = 0, length = strlen(key) + strlen(val) + 4 + 2 + 1; //clef + val + 4 guillemet + ": " + \0
|
|
|
char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": \"%s\"", key, val);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(val); i++, index++){
|
|
|
+ str[index] = val[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
@@ -76,21 +88,44 @@ void add_number(JsonEncoder* this, char* key, double val, int ndigit){
|
|
|
char nombre[20];
|
|
|
ftoa(val, nombre, ndigit);
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
+ int index = 0, length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": %s", key, nombre);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ for(int i = 0; i < strlen(nombre); i++, index++){
|
|
|
+ str[index] = nombre[i];
|
|
|
+ }
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
|
}
|
|
|
|
|
|
void add_integer(JsonEncoder* this, char* key, int val){
|
|
|
+ //Double en string
|
|
|
+ char nombre[20];
|
|
|
+ snprintf(nombre, 20, "%d", val);
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + ceil(val/10.0) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
- char* str = malloc(length * sizeof(char));
|
|
|
+ int index = 0, length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
+ char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": %d", key, val);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ for(int i = 0; i < strlen(nombre); i++, index++){
|
|
|
+ str[index] = nombre[i];
|
|
|
+ }
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
@@ -105,10 +140,20 @@ void add_boolean(JsonEncoder* this, char* key, boolean val){
|
|
|
strcpy(bool, "false");
|
|
|
}
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + strlen(bool) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
+ int index = 0, length = strlen(key) + strlen(bool) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": %s", key, bool);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ for(int i = 0; i < strlen(bool); i++, index++){
|
|
|
+ str[index] = bool[i];
|
|
|
+ }
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
@@ -123,10 +168,20 @@ void add_array(JsonEncoder* this, char* key, JsonArray* val){
|
|
|
char* json;
|
|
|
json = json_encode_array(val);
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
+ int index = 0, length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": %s", key, json);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ for(int i = 0; i < strlen(json); i++, index++){
|
|
|
+ str[index] = json[i];
|
|
|
+ }
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
@@ -138,10 +193,20 @@ void add_object(JsonEncoder* this, char* key, JsonEncoder* val){
|
|
|
char* json;
|
|
|
json = json_encode(val);
|
|
|
//Creation chaine
|
|
|
- int length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
+ int index = 0, length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
|
|
|
char* str = malloc(length * sizeof(char));
|
|
|
memset(str, 0, length);
|
|
|
- sprintf(str, "\"%s\": %s", key, json);
|
|
|
+ //Copie
|
|
|
+ str[index++] = '"';
|
|
|
+ for(int i = 0; i < strlen(key); i++, index++){
|
|
|
+ str[index] = key[i];
|
|
|
+ }
|
|
|
+ str[index++] = '"';
|
|
|
+ str[index++] = ':';
|
|
|
+ str[index++] = ' ';
|
|
|
+ for(int i = 0; i < strlen(json); i++, index++){
|
|
|
+ str[index] = json[i];
|
|
|
+ }
|
|
|
//Ajout
|
|
|
add_value(this, str);
|
|
|
free(str);
|
|
@@ -150,6 +215,7 @@ void add_object(JsonEncoder* this, char* key, JsonEncoder* val){
|
|
|
|
|
|
char* json_encode(JsonEncoder* this){
|
|
|
boolean first = true;
|
|
|
+ int length, index = 0;
|
|
|
//Allocation chaine
|
|
|
char* str;
|
|
|
str = malloc((this->length + 2) * sizeof(char)); // La chaine + {}
|
|
@@ -157,17 +223,30 @@ char* json_encode(JsonEncoder* this){
|
|
|
//Creation de la chaine
|
|
|
JsonNode* node;
|
|
|
node = this->head;
|
|
|
- str[0] = '{';
|
|
|
+ str[index++] = '{';
|
|
|
while(node != NULL){
|
|
|
+ if(!first){
|
|
|
+ str[index++] = ',';
|
|
|
+ str[index++] = ' ';
|
|
|
+ }
|
|
|
+ length = strlen(node->str);
|
|
|
+ for(int i = 0; i < length; i++, index++){
|
|
|
+ str[index] = node->str[i];
|
|
|
+ }
|
|
|
if(first){
|
|
|
- sprintf(str, "%s%s", str, node->str);
|
|
|
first = false;
|
|
|
- } else {
|
|
|
- sprintf(str, "%s, %s", str, node->str);
|
|
|
}
|
|
|
+ /*if(first){
|
|
|
+ snprintf(str, this->length + 2, "%s%s", str, node->str);
|
|
|
+ printf("Json %s\n", str);
|
|
|
+ first = false;
|
|
|
+ } else {
|
|
|
+ snprintf(str, this->length + 2, "%s, %s", str, node->str);
|
|
|
+ printf("Json %s\n", str);
|
|
|
+ }*/
|
|
|
node = node->next;
|
|
|
}
|
|
|
- sprintf(str, "%s}", str);
|
|
|
+ str[index++] = '}';
|
|
|
//Retour
|
|
|
return str;
|
|
|
}
|