Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
JSONReader.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* JSONReader.h (C) 2000-2023 */
9/* */
10/* Lecteur au format JSON. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_JSONREADER_H
13#define ARCANE_UTILS_JSONREADER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/Array.h"
19
20#include <vector>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27class JSONWrapperUtils;
28class JSONKeyValue;
29class JSONKeyValueList;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33/*!
34 * \internal
35 * \brief Représente une valeur JSON.
36 *
37 * Les instances de cette classe ne sont valides que tant que le document
38 * associé existe.
39 *
40 * \warning API Interne. Ne pas utiliser en dehors de Arcane.
41 */
42class ARCANE_UTILS_EXPORT JSONValue
43{
44 class Impl;
45 friend JSONWrapperUtils;
46 friend JSONKeyValue;
47
48 private:
49
50 explicit JSONValue(Impl* p)
51 : m_p(p)
52 {}
53
54 public:
55
56 JSONValue()
57 : m_p(nullptr)
58 {}
59
60 public:
61
62 //! Vrai si le noeud est nul
63 bool null() const { return !m_p; }
64 bool operator!() const { return null(); }
65
66 public:
67
68 ARCANE_DEPRECATED_REASON("Y2023: Use valueAsStringView() or value() instead")
69 StringView valueAsString() const;
70
71 //! Valeur sous forme de String. La chaîne retournée est nulle si 'null()' est vrai.
72 String value() const;
73 /*!
74 * \brief Valeur sous forme de StringView.
75 * La chaîne est vide si 'null()' est vrai.
76 * \note Si on veut faire la distinction entre la valeur nulle et une chaîne
77 * de caractères vide, il faut utiliser value().
78 */
79 StringView valueAsStringView() const;
80 //! Valeur sous forme de Real. Retourn 0.0 si 'null()' est vrai.
81 Real valueAsReal() const;
82 //! Valeur sous forme de Int64. Retourn 0 si 'null()' est vrai.
83 Int64 valueAsInt64() const;
84 //! Valeur sous forme de Int64. Retourn 0 si 'null()' est vrai.
85 Int32 valueAsInt32() const;
86 //! Valeur sous forme de booléen. Retourn false si 'null()' est vrai.
87 bool valueAsBool() const;
88 JSONValueList valueAsArray() const;
89
90 public:
91
92 JSONKeyValue keyValueChild(StringView name) const;
93 //! Valeur fille de nom \a name. Retourne une valeur nulle si non trouvé.
94 JSONValue child(StringView name) const;
95 //! Valeur fille de nom \a name. Lance une exception si non trouvé.
96 JSONValue expectedChild(StringView name) const;
97 // Liste des objects fils de cet objet. L'instance doit être un objet
98 JSONValueList children() const;
99 JSONKeyValueList keyValueChildren() const;
100
101 public:
102
103 bool isArray() const;
104 bool isObject() const;
105
106 private:
107
108 Impl* m_p;
109};
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113/*!
114 * \internal
115 * \brief Représente une paire (clé,valeur) de JSON.
116 *
117 * Les instances de cette classe ne sont valides que tant que le document
118 * associé existe.
119 *
120 * \warning API Interne. Ne pas utiliser en dehors de Arcane.
121 */
122class ARCANE_UTILS_EXPORT JSONKeyValue
123{
124 class Impl;
125 friend JSONWrapperUtils;
126
127 private:
128
129 explicit JSONKeyValue(Impl* p)
130 : m_p(p)
131 {}
132
133 public:
134
136 : m_p(nullptr)
137 {}
138
139 public:
140
141 //! Vrai si le noeud est nul
142 bool null() const { return !m_p; }
143 bool operator!() const { return null(); }
144
145 public:
146
147 StringView name() const;
148 JSONValue value() const;
149
150 private:
151
152 Impl* m_p;
153};
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157/*!
158 * \brief Liste de (clé,valeur) d'un document JSON.
159 *
160 * Les instances de cette classe ne sont valides que tant que le document
161 * associé existe.
162 *
163 * \warning API Interne. Ne pas utiliser en dehors de Arcane.
164 */
165class ARCANE_UTILS_EXPORT JSONKeyValueList
166{
167 typedef std::vector<JSONKeyValue> ContainerType;
168
169 public:
170
171 typedef ContainerType::const_iterator const_iterator;
172 typedef ContainerType::iterator iterator;
173
174 public:
175
176 void add(JSONKeyValue v)
177 {
178 m_values.push_back(v);
179 }
180 const_iterator begin() const { return m_values.begin(); }
181 const_iterator end() const { return m_values.end(); }
182
183 private:
184
185 std::vector<JSONKeyValue> m_values;
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190/*!
191 * \brief Liste de valeurs d'un document JSON.
192 *
193 * Les instances de cette classe ne sont valides que tant que le document
194 * associé existe.
195 *
196 * \warning API Interne. Ne pas utiliser en dehors de Arcane.
197 */
198class ARCANE_UTILS_EXPORT JSONValueList
199{
200 typedef std::vector<JSONValue> ContainerType;
201
202 public:
203
204 typedef ContainerType::const_iterator const_iterator;
205 typedef ContainerType::iterator iterator;
206
207 public:
208
209 void add(JSONValue v)
210 {
211 m_values.push_back(v);
212 }
213 const_iterator begin() const { return m_values.begin(); }
214 const_iterator end() const { return m_values.end(); }
215
216 private:
217
218 std::vector<JSONValue> m_values;
219};
220
221/*---------------------------------------------------------------------------*/
222/*---------------------------------------------------------------------------*/
223/*!
224 * \internal
225 * \brief Gestion d'un document JSON.
226 *
227 * \warning API Interne. Ne pas utiliser en dehors de Arcane.
228 */
229class ARCANE_UTILS_EXPORT JSONDocument
230{
231 class Impl;
232
233 public:
234
235 JSONDocument();
237
238 public:
239
240 //! Lit le fichier au format UTF-8.
241 void parse(Span<const Byte> bytes);
242 //! Lit le fichier au format UTF-8.
243 void parse(Span<const std::byte> bytes);
244 //! Lit le fichier au format UTF-8.
245 void parse(Span<const Byte> bytes, StringView file_name);
246 //! Lit le fichier au format UTF-8.
247 void parse(Span<const std::byte> bytes, StringView file_name);
248 //! Elément racine
249 JSONValue root() const;
250
251 private:
252
253 Impl* m_p;
254};
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
259} // namespace Arcane
260
261/*---------------------------------------------------------------------------*/
262/*---------------------------------------------------------------------------*/
263
264#endif
Déclarations des types utilisés dans Arcane.
Liste de (clé,valeur) d'un document JSON.
Definition JSONReader.h:166
bool null() const
Vrai si le noeud est nul.
Definition JSONReader.h:142
Liste de valeurs d'un document JSON.
Definition JSONReader.h:199
bool null() const
Vrai si le noeud est nul.
Definition JSONReader.h:63
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
Vue sur une chaîne de caractères UTF-8.
Definition StringView.h:47
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-