14#include "arccore/common/JSONReader.h"
16#include "arccore/base/FatalErrorException.h"
17#include "arccore/base/CheckedConvert.h"
18#include "arccore/base/internal/ConvertInternal.h"
20#define RAPIDJSON_HAS_STDSTRING 1
22#include "arccore/common/internal/json/rapidjson/stringbuffer.h"
49 rapidjson::Value* toValue()
const
51 return (rapidjson::Value*)(
this);
67 static JSONValue build(rapidjson::Value* v)
94 auto& x = m_p->toMember()->
name;
103JSONValue JSONKeyValue::
108 auto& x = m_p->toMember()->
value;
109 return JSONWrapperUtils::build(&x);
120 auto x = m_p->toValue();
134 auto x = m_p->toValue();
157 auto x = m_p->toValue();
159 return x->GetInt64();
171 auto x = m_p->toValue();
184 return CheckedConvert::toInt32(v);
195 auto x = m_p->toValue();
196 std::cout <<
"TYPE=" << x->GetType() <<
"\n";
198 return x->GetDouble();
199 if (x->GetType() == rapidjson::kStringType) {
203 if (!Convert::Impl::StringViewToIntegral::getValue(r, s))
217 auto d = m_p->toValue();
219 if (x == d->MemberEnd())
221 return JSONWrapperUtils::build(x);
230 return keyValueChild(name).
value();
239 JSONKeyValue k = keyValueChild(name);
253 auto d = m_p->toValue();
257 for (
auto& x : d->GetObject()) {
258 auto y = JSONWrapperUtils::build(&x);
259 values.add(y.value());
271 return JSONValueList();
272 auto d = m_p->toValue();
273 JSONValueList values;
276 for (rapidjson::SizeType i = 0; i < d->Size(); ++i) {
277 rapidjson::Value& x = (*d)[i];
278 auto y = JSONWrapperUtils::build(&x);
292 auto d = m_p->toValue();
304 auto d = m_p->toValue();
305 return d->IsObject();
312keyValueChildren()
const
315 return JSONKeyValueList();
316 auto d = m_p->toValue();
317 JSONKeyValueList values;
318 for (
auto& x : d->GetObject()) {
319 auto y = JSONWrapperUtils::build(&x);
342 rapidjson::Document m_document;
372 return "The document is empty";
374 return "The document root must not follow by other values";
376 return "Invalid value";
378 return "Missing a name for object member";
380 return "Missing a colon after a name of object member";
382 return "Missing a comma or '}' after an object member";
384 return "Missing a comma or ']' after an array element";
386 return "Incorrect hex digit after \\u escape in string";
388 return "The surrogate pair in string is invalid";
390 return "Invalid escape character in string";
392 return "Missing a closing quotation mark in string";
394 return "Invalid encoding in string";
396 return "Number too big to be stored in double";
398 return "Miss fraction part in number";
400 return "Miss exponent in number";
402 return "Parsing was terminated";
404 return "Unspecific syntax error";
423 ARCCORE_FATAL(
"Parsing error file='{0}' ret={1} position={2} message='{3}'",
435 parse(bytes,
"(Unknown)");
462 rapidjson::Value& d = m_p->m_document;
463 return JSONWrapperUtils::build(&d);
#define ARCCORE_FATAL(...)
Macro throwing a FatalErrorException.
void parse(Span< const Byte > bytes)
Reads the file in UTF-8 format.
JSONValue root() const
Root element.
List of (key,value) pairs of a JSON document.
Represents a (key,value) pair of JSON.
List of values of a JSON document.
String value() const
Value in String format. The returned string is null if 'null()' is true.
Int32 valueAsInt32() const
Value in Int64 format. Returns 0 if 'null()' is true.
Real valueAsReal() const
Value in Real format. Returns 0.0 if 'null()' is true.
bool valueAsBool() const
Value in boolean format. Returns false if 'null()' is true.
Int64 valueAsInt64() const
Value in Int64 format. Returns 0 if 'null()' is true.
StringView valueAsStringView() const
Value in StringView format. The string is empty if 'null()' is true.
JSONValue expectedChild(StringView name) const
Child value with name name. Throws an exception if not found.
JSONValue child(StringView name) const
Child value with name name. Returns a null value if not found.
View of an array of elements of type T.
View of a UTF-8 character string.
constexpr Span< const Byte > bytes() const ARCCORE_NOEXCEPT
Returns the conversion of the instance in UTF-8 encoding.
Unicode character string.
constexpr __host__ __device__ pointer data() const noexcept
Pointer to the start of the view.
bool HasParseError() const
Whether a parse error has occurred in the last parsing.
GenericDocument & Parse(const typename SourceEncoding::Ch *str)
Parse JSON text from a read-only string (with Encoding conversion).
ParseErrorCode GetParseError() const
Get the ParseErrorCode of last parsing.
GenericValue< Encoding, Allocator > name
name of member (must be a string)
GenericValue< Encoding, Allocator > value
value of member.
GenericMemberIterator< false, UTF8<>, RAPIDJSON_DEFAULT_ALLOCATOR >::Iterator MemberIterator
GenericMember< UTF8<>, RAPIDJSON_DEFAULT_ALLOCATOR > Member
GenericMemberIterator< true, UTF8<>, RAPIDJSON_DEFAULT_ALLOCATOR >::Iterator ConstMemberIterator
GenericDocument< UTF8<> > Document
GenericDocument with UTF8 encoding.
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.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
double Real
Type representing a real number.
Impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converts the view into an array of non-modifiable bytes.
unsigned char Byte
Type of a byte.
std::int32_t Int32
Signed integer type of 32 bits.
Result of parsing (wraps ParseErrorCode).
ParseErrorCode Code() const
Get the error code.
size_t Offset() const
Get the error offset, if IsError(), 0 otherwise.