2017-08-16 5 views
-1

Je suis en train de créer un objet JSON comme ci-dessous, mais je ne suis pas en mesure d'ajouter le deuxième élément il par exemple:créer un objet JSON en utilisant cJSON.h

"CarType": "mercedes", 
"carID": "merc123" 

et aussi d'autres articles.

Je veux créer JSON comme ceci:

{ 
    cars: [ 
    { 
     "CarType": "BMW", 
     "carID": "bmw123" 
    }, 
    { 
     "CarType": "mercedes", 
     "carID": "merc123" 
    }, 
    { 
     "CarType": "volvo", 
     "carID": "vol123r" 
    }, 
    { 
     "CarType": "ford", 
     "carID": "ford123" 
    } 
    ] 
}; 

J'ai essayé jusqu'à présent:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "cJSON.h" 

int main (void){ 
    char field_name[32], value[32], *out; 
    cJSON *root,*car; 

    root = cJSON_CreateObject(); 
    car= cJSON_CreateArray(); 

    cJSON_AddItemToObject(root, "CarType", cJSON_CreateString("BMW")); 
    cJSON_AddItemToObject(root, "carID", cJSON_CreateString("bmw123")); 
    cJSON_AddItemToArray(car, root); 

    out = cJSON_Print(car); 
    printf("%s\n",out); 

    return 0; 
} 

Ma sortie est quelque chose comme ça (indentation est exactement comme montré ici):

[{ 
     "CarType": "BMW", 
     "carID": "bmw123" 
    }] 
+5

et quelle est la question ...? – haccks

+3

Bienvenue dans StackOverflow. Malheureusement, il ne s'agit pas d'un site de tutoriel ni de remplacement de la recherche sur le Web. Nous pouvons vous aider à résoudre [certains problèmes] (https://stackoverflow.com/help/on-topic), mais c'est ** votre ** travail de [mettre quelques efforts] (http://meta.stackoverflow.com/questions/261592) en premier lieu, incl. elementary [(re) search] (https://google.com/) –

+0

Modifiez votre question pour nous montrer ce que vous avez essayé et quel est le problème réel. –

Répondre

1

Le code suivant vous montre comment utiliser les fonctions cjson comme cJSON_CreateObject()cJSON_CreateArray(), cJSON_AddItemToObject() et cJSON_AddItemToArray(). Vous devez ajouter le tableau cars à l'objet root. Après cela, vous devez créer chaque car comme objet contenant des éléments qui sont les CarType et carID. Chaque objet car doit être ajouté au tableau cars.

Il a également très bien documenté avec les exemples here at GitHub.

code:

#include <stdio.h> 
#include <stdlib.h> 
#include "cJSON.h" 

int main() 
{ 
    char *out; 
    cJSON *root, *cars, *car; 

    /* create root node and array */ 
    root = cJSON_CreateObject(); 
    cars = cJSON_CreateArray(); 

    /* add cars array to root */ 
    cJSON_AddItemToObject(root, "cars", cars); 

    /* add 1st car to cars array */ 
    cJSON_AddItemToArray(cars, car = cJSON_CreateObject()); 
    cJSON_AddItemToObject(car, "CarType", cJSON_CreateString("BMW")); 
    cJSON_AddItemToObject(car, "carID", cJSON_CreateString("bmw123")); 

    /* add 2nd car to cars array */ 
    cJSON_AddItemToArray(cars, car = cJSON_CreateObject()); 
    cJSON_AddItemToObject(car, "CarType", cJSON_CreateString("mercedes")); 
    cJSON_AddItemToObject(car, "carID", cJSON_CreateString("mercedes123")); 

    out = cJSON_Print(root); 
    printf("%s\n",out); 

    return 0; 
} 

Sortie:

{ 
    "cars": [{ 
      "CarType": "BMW", 
      "carID": "bmw123" 
     }, { 
      "CarType": "mercedes", 
      "carID": "mercedes123" 
     }] 
} 

Ce code il suffit d'ajouter 2 voitures pour montrer l'utilisation. Dans votre application réelle, vous devriez le faire avec C arrays et une boucle for.

+0

Merci pour votre temps et vos efforts. – Abhishek

+0

De rien! –

0

Si la chaîne json est fixe, vous pouvez simplement utiliser la fonction cJSON_Parse, pour cela vous devez d avoir le char* lui:

const char* const json_string = 
"{ \ 
    \"cars\": [\ 
    {\ 
     \"CarType\": \"BMW\",\ 
     \"carID\": \"bmw123\"\ 
    },\ 
    {\ 
     \"CarType\": \"mercedes\",\ 
     \"carID\": \"merc123\"\ 
    },\ 
    {\ 
     \"CarType\": \"volvo\",\ 
     \"carID\": \"vol123r\"\ 
    },\ 
    {\ 
     \"CarType\": \"ford\",\ 
     \"carID\": \"ford123\"\ 
    }\ 
    ]\ 
}\ 
"; 

    cJSON * root = cJSON_Parse(json_string); /* Play with root */ 

    //char *rendered = cJSON_Print(root); 

Mise à jour selon la demande, lorsque tableau d'entrée n'est pas fixé:

const char* const carType[] ={"BMW", "Mercides", "Audi", "Farari"}; 
    const char* const carID[] ={"bmw11", "m22", "a33", "f44"} ; 

    size_t max_size = 4; 
    cJSON *root,*car; 

    root = cJSON_CreateObject(); 
    car= cJSON_CreateArray(); 

    for(size_t i = 0; i < max_size; ++i) 
    { 
     cJSON* item = cJSON_CreateObject(); 
     cJSON_AddItemToObject(item, "CarType", cJSON_CreateString(carType[i])); 
     cJSON_AddItemToObject(item, "carID", cJSON_CreateString(carID[i])); 

     cJSON_AddItemToArray(car, item); 
    } 


    cJSON_AddItemToObject(root, "cars", car); 
+0

il n'est pas corrigé, il viendra d'un tableau de chaînes. – Abhishek

+0

string carType [] = {"BMW", "Mercides", "Audi", "Farari"}; chaîne carID [] = {"bmw11", "m22", "a33", "f44"}; – Abhishek

+0

@Abhishek Vous devez mentionner cela dans votre message, nous n'avons pas la capacité psychique de lire l'esprit des gens. – P0W

0

Une autre solution que je suis arrivé -

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "cJSON.h" 

int main (void){ 
    char field_name[32], value[32], *out; 
    cJSON *root,*car; 

    root = cJSON_CreateObject(); 
    car= cJSON_CreateArray(); 


    cJSON_AddItemToObject(root, "CarType", cJSON_CreateString("BMW")); 
    cJSON_AddItemToObject(root, "carID", cJSON_CreateString("bmws123")); 
    cJSON_AddItemToArray(car, root); 

    root=NULL; 
    root = cJSON_CreateObject(); 

    cJSON_AddItemToObject(root, "CarType", cJSON_CreateString("Mercedies")); 
    cJSON_AddItemToObject(root, "carID", cJSON_CreateString("mer123")); 
    cJSON_AddItemToArray(car, root); 



    out = cJSON_Print(car); 
    printf("%s\n",out); 


    return 0; 
} 
+0

Oui fonctionnerait mais les noms sont erronés dans l'utilisation ici que vous utilisez 'root' ** pas ** comme objet racine. De plus, vous avez juste un tableau 'car' sans objet racine. –