14#include "arcane/utils/JSONReader.h"
15#include "arcane/utils/FatalErrorException.h"
16#include "arcane/utils/ValueConvert.h"
17#include "arcane/utils/CheckedConvert.h"
19#define RAPIDJSON_HAS_STDSTRING 1
21#include "arcane/utils/internal/json/rapidjson/stringbuffer.h"
46 rapidjson::Value* toValue()
const
48 return (rapidjson::Value*)(
this);
63 static JSONValue build(rapidjson::Value* v)
90 auto& x = m_p->toMember()->
name;
99JSONValue JSONKeyValue::
104 auto& x = m_p->toMember()->
value;
105 return JSONWrapperUtils::build(&x);
116 auto x = m_p->toValue();
130 auto x = m_p->toValue();
153 auto x = m_p->toValue();
155 return x->GetInt64();
167 auto x = m_p->toValue();
191 auto x = m_p->toValue();
192 std::cout <<
"TYPE=" << x->GetType() <<
"\n";
194 return x->GetDouble();
195 if (x->GetType()==rapidjson::kStringType){
199 if (!builtInGetValue(
r,s))
213 auto d = m_p->toValue();
215 if (x==d->MemberEnd())
217 return JSONWrapperUtils::build(x);
226 return keyValueChild(name).value();
237 ARCANE_FATAL(
"No key '{0}' found in json document",name);
249 auto d = m_p->toValue();
254 auto y = JSONWrapperUtils::build(&x);
255 values.add(y.value());
263JSONValueList JSONValue::
267 return JSONValueList();
268 auto d = m_p->toValue();
269 JSONValueList values;
272 for( rapidjson::SizeType i = 0; i < d->Size(); ++i ){
273 rapidjson::Value& x = (*d)[i];
274 auto y = JSONWrapperUtils::build(&x);
288 auto d = m_p->toValue();
300 auto d = m_p->toValue();
301 return d->IsObject();
307JSONKeyValueList JSONValue::
308keyValueChildren()
const
311 return JSONKeyValueList();
312 auto d = m_p->toValue();
313 JSONKeyValueList values;
314 for(
auto& x : d->GetObject()){
315 auto y = JSONWrapperUtils::build(&x);
330 Impl() : m_document()
334 rapidjson::Document m_document;
394 ParseResult r = d.Parse((
const char*)bytes.data(),bytes.size());
395 if (d.HasParseError()){
396 std::cout <<
"ERROR: " << d.GetParseError() <<
"\n";
397 ARCANE_FATAL(
"Parsing error file='{0}' ret={1} position={2} message='{3}'",
398 filename,d.GetParseError(),
409 parse(bytes,
"(Unknown)");
418 parse(asBytes(bytes));
427 parse(asBytes(bytes),filename);
436 rapidjson::Value& d = m_p->m_document;
437 return JSONWrapperUtils::build(&d);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void parse(Span< const Byte > bytes)
Lit le fichier au format UTF-8.
JSONValue root() const
Elément racine.
Représente une paire (clé,valeur) de JSON.
Liste de valeurs d'un document JSON.
Représente une valeur JSON.
String value() const
Valeur sous forme de String. La chaîne retournée est nulle si 'null()' est vrai.
Int32 valueAsInt32() const
Valeur sous forme de Int64. Retourn 0 si 'null()' est vrai.
Real valueAsReal() const
Valeur sous forme de Real. Retourn 0.0 si 'null()' est vrai.
bool valueAsBool() const
Valeur sous forme de booléen. Retourn false si 'null()' est vrai.
Int64 valueAsInt64() const
Valeur sous forme de Int64. Retourn 0 si 'null()' est vrai.
StringView valueAsStringView() const
Valeur sous forme de StringView. La chaîne est vide si 'null()' est vrai.
JSONValue expectedChild(StringView name) const
Valeur fille de nom name. Lance une exception si non trouvé.
JSONValue child(StringView name) const
Valeur fille de nom name. Retourne une valeur nulle si non trouvé.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur une chaîne de caractères UTF-8.
Chaîne de caractères unicode.
(Constant) member iterator for a JSON object value
Name-value pair in a JSON object value.
GenericValue< Encoding, Allocator > name
name of member (must be a string)
GenericValue< Encoding, Allocator > value
value of member.
ParseErrorCode
Error code of parsing.
@ kParseErrorDocumentEmpty
The document is empty.
@ kParseErrorNumberMissFraction
Miss fraction part in number.
@ kParseErrorStringInvalidEncoding
Invalid encoding in string.
@ kParseErrorValueInvalid
Invalid value.
@ kParseErrorDocumentRootNotSingular
The document root must not follow by other values.
@ kParseErrorUnspecificSyntaxError
Unspecific syntax error.
@ kParseErrorObjectMissCommaOrCurlyBracket
Missing a comma or '}' after an object member.
@ kParseErrorObjectMissColon
Missing a colon after a name of object member.
@ kParseErrorStringMissQuotationMark
Missing a closing quotation mark in string.
@ kParseErrorTermination
Parsing was terminated.
@ kParseErrorNumberMissExponent
Miss exponent in number.
@ kParseErrorStringEscapeInvalid
Invalid escape character in string.
@ kParseErrorArrayMissCommaOrSquareBracket
Missing a comma or ']' after an array element.
@ kParseErrorNone
No error.
@ kParseErrorStringUnicodeSurrogateInvalid
The surrogate pair in string is invalid.
@ kParseErrorObjectMissName
Missing a name for object member.
@ kParseErrorNumberTooBig
Number too big to be stored in double.
@ kParseErrorStringUnicodeEscapeInvalidHex
Incorrect hex digit after \u escape in string.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Result of parsing (wraps ParseErrorCode)