source: rtos_arduino/trunk/arduino_lib/libraries/ArduinoJson/src/JsonVariant.cpp@ 209

Last change on this file since 209 was 209, checked in by ertl-honda, 8 years ago

BlueMix用のフィアルを追加

File size: 2.7 KB
Line 
1// Copyright Benoit Blanchon 2014-2016
2// MIT License
3//
4// Arduino JSON library
5// https://github.com/bblanchon/ArduinoJson
6// If you like this project, please add a star!
7
8#include "../include/ArduinoJson/JsonVariant.hpp"
9
10#include "../include/ArduinoJson/JsonArray.hpp"
11#include "../include/ArduinoJson/JsonObject.hpp"
12
13#include <errno.h> // for errno
14#include <stdlib.h> // for strtol, strtod
15
16using namespace ArduinoJson::Internals;
17
18namespace ArduinoJson {
19
20const char *JsonVariant::asString() const {
21 if (_type == JSON_UNPARSED && _content.asString &&
22 !strcmp("null", _content.asString))
23 return NULL;
24 if (_type == JSON_STRING || _type == JSON_UNPARSED) return _content.asString;
25 return NULL;
26}
27
28JsonFloat JsonVariant::asFloat() const {
29 if (_type >= JSON_FLOAT_0_DECIMALS) return _content.asFloat;
30
31 if (_type == JSON_INTEGER || _type == JSON_BOOLEAN)
32 return static_cast<JsonFloat>(_content.asInteger);
33
34 if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString)
35 return parse<JsonFloat>(_content.asString);
36
37 return 0.0;
38}
39
40String JsonVariant::toString() const {
41 String s;
42 if ((_type == JSON_STRING || _type == JSON_UNPARSED) &&
43 _content.asString != NULL)
44 s = _content.asString;
45 else
46 printTo(s);
47 return s;
48}
49
50template <>
51bool JsonVariant::is<bool>() const {
52 if (_type == JSON_BOOLEAN) return true;
53
54 if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
55
56 return !strcmp(_content.asString, "true") ||
57 !strcmp(_content.asString, "false");
58}
59
60template <>
61bool JsonVariant::is<signed long>() const {
62 if (_type == JSON_INTEGER) return true;
63
64 if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
65
66 char *end;
67 errno = 0;
68 strtol(_content.asString, &end, 10);
69
70 return *end == '\0' && errno == 0;
71}
72
73template <>
74bool JsonVariant::is<double>() const {
75 if (_type >= JSON_FLOAT_0_DECIMALS) return true;
76
77 if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
78
79 char *end;
80 errno = 0;
81 strtod(_content.asString, &end);
82
83 return *end == '\0' && errno == 0 && !is<long>();
84}
85
86void JsonVariant::writeTo(JsonWriter &writer) const {
87 if (_type == JSON_ARRAY)
88 _content.asArray->writeTo(writer);
89
90 else if (_type == JSON_OBJECT)
91 _content.asObject->writeTo(writer);
92
93 else if (_type == JSON_STRING)
94 writer.writeString(_content.asString);
95
96 else if (_type == JSON_UNPARSED)
97 writer.writeRaw(_content.asString);
98
99 else if (_type == JSON_INTEGER)
100 writer.writeInteger(_content.asInteger);
101
102 else if (_type == JSON_BOOLEAN)
103 writer.writeBoolean(_content.asInteger != 0);
104
105 else if (_type >= JSON_FLOAT_0_DECIMALS) {
106 uint8_t decimals = static_cast<uint8_t>(_type - JSON_FLOAT_0_DECIMALS);
107 writer.writeFloat(_content.asFloat, decimals);
108 }
109}
110}
Note: See TracBrowser for help on using the repository browser.