json.cpp 3.66 KB
Newer Older
Mathieu Giraud's avatar
Mathieu Giraud committed
1 2 3 4 5 6 7
#include <string>
#include "json.h"
#include <sstream>
#include "labels.h"

using namespace std ;

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
string escapeJsonString(const string& input) {
    ostringstream ss;
    for (std::string::const_iterator iter = input.begin(); iter != input.end();  iter++) {
        switch (*iter) {
            case '\\': ss << "\\\\"; break;
            case '"': ss << "\\\""; break;
            case '/': ss << "\\/"; break;
            case '\b': ss << "\\b"; break;
            case '\f': ss << "\\f"; break;
            case '\n': ss << "\\n"; break;
            case '\r': ss << "\\r"; break;
            case '\t': ss << "\\t"; break;
            default: ss << *iter; break;
        }
    }
    return ss.str();
}


WebTogz's avatar
WebTogz committed
27 28 29
/*
 Constructeur de JsonData
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
30 31 32
JsonData::JsonData(){
}

WebTogz's avatar
WebTogz committed
33 34 35
/*
 Méthode permettant de retourner le contenu d'un tampon, dans lequel on a "imprimé" un nom ainsi que ses données
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
36 37 38 39 40 41 42
string JsonData::toString(){
  ostringstream stream;
  
  stream  << "\"" << name << "\" : " << data << endl;
  return stream.str();;
}

WebTogz's avatar
WebTogz committed
43 44 45
/*
 Constructeur de JsonList
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
46 47 48
JsonList::JsonList(){
}

WebTogz's avatar
WebTogz committed
49 50 51
/*
 Méthode permettant d'ajouter un nouvel élément Json composé d'un nom et de ses données
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
52 53 54 55
void JsonList::add(string n, string d){
  JsonData elem;
  
  elem.name=n;
56
  elem.data="\""+escapeJsonString(d)+"\"";
Mathieu Giraud's avatar
Mathieu Giraud committed
57 58 59
  l.push_back(elem);
}

WebTogz's avatar
WebTogz committed
60 61 62
/*
 Méthode permettant d'ajouter un élèment Json composé d'un nom ainsi que d'une chaîne de caractères représentant le flottant donné en paramètre
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
63 64 65 66
void JsonList::add(string n, float d){
  JsonData elem;
  ostringstream stream;
  
WebTogz's avatar
WebTogz committed
67
  //Impression du flottant dans le buffer
Mathieu Giraud's avatar
Mathieu Giraud committed
68 69
  stream << d;
  elem.name=n;
WebTogz's avatar
WebTogz committed
70
  //On prend la chaîne de caractères associée à l'impression du flottant dans le buffer
Mathieu Giraud's avatar
Mathieu Giraud committed
71 72 73 74
  elem.data=stream.str();
  l.push_back(elem);
}

WebTogz's avatar
WebTogz committed
75 76 77
/*
 Méthode permettant d'ajouter un élèment Json composé d'un nom et d'une liste d'objets Json
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
78 79 80 81 82 83 84 85
void JsonList::add(string n, JsonList &d){
  JsonData elem;
  
  elem.name=n;
  elem.data=d.toString();
  l.push_back(elem);
}

WebTogz's avatar
WebTogz committed
86 87 88
/*
 Méthode permettant d'ajouter un élèment Json composé d'un nom et d'un tableau d'objets Json
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
89 90 91 92 93 94 95 96
void JsonList::add(string n, JsonArray &d){
  JsonData elem;
  
  elem.name=n;
  elem.data=d.toString();
  l.push_back(elem);
}

WebTogz's avatar
WebTogz committed
97 98 99
/*
 Méthode permettant de concaténer 2 objets JsonList
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
100 101 102 103
void JsonList::concat(JsonList &d){
	l.insert(l.end(), d.l.begin(), d.l.end());
}

WebTogz's avatar
WebTogz committed
104 105 106
/*
 Méthode permettant de retourner le contenu d'une JsonList
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
string JsonList::toString(){
  ostringstream stream;
  
  stream << " { ";
  
  for ( list<JsonData>::iterator i=l.begin(); i!= l.end(); ++i){
    if (i!=l.begin()) stream << ",";
    stream << endl << "\"" << (*i).name << "\" : " << (*i).data ;
  }
  
  stream << endl << " } ";
  
  return stream.str();;
}

WebTogz's avatar
WebTogz committed
122 123 124
/*
 Constructeur de JsonArray
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
125 126 127
JsonArray::JsonArray(){
}

WebTogz's avatar
WebTogz committed
128 129 130
/*
 Méthode permettant d'ajouter un nom d'objet
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
131
void JsonArray::add(string d){
132
  l.push_back("\""+escapeJsonString(d)+"\"");
Mathieu Giraud's avatar
Mathieu Giraud committed
133 134
}

WebTogz's avatar
WebTogz committed
135 136 137
/*
 Méthode permettant d'ajouter une donnée 
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
138 139 140 141 142 143
void JsonArray::add(float d){
  ostringstream stream;
  stream << d;
  l.push_back(stream.str());
}

WebTogz's avatar
WebTogz committed
144 145 146
/*
 Méthode permettant d'ajouter un tableau d'objets Json (type: JsonArray)
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
147 148 149 150
void JsonArray::add(JsonArray &d){
  l.push_back(d.toString());
}

WebTogz's avatar
WebTogz committed
151 152 153
/*
 Méthode permettant d'ajouter une liste d'objets Json (type: JsonList)
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
154 155 156 157
void JsonArray::add(JsonList &d){
  l.push_back(d.toString());
}

WebTogz's avatar
WebTogz committed
158 159 160
/*
 Méthode permettant de retourner le contenu d'un objet JsonArray
 */
Mathieu Giraud's avatar
Mathieu Giraud committed
161 162 163 164 165 166
string JsonArray::toString(){
  ostringstream stream;
  
  stream << " [ ";
  
  for ( list<string>::iterator i=l.begin(); i!= l.end(); ++i){
167
    if (i!=l.begin()) stream << ", " << endl;
Mathieu Giraud's avatar
Mathieu Giraud committed
168 169 170 171 172 173 174
    stream << (*i);
  }
  
  stream << " ] ";
  
  return stream.str();
}