mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-19 05:22:24 +02:00
Extracted interface JsonSink.
This commit is contained in:
@ -5,26 +5,88 @@
|
||||
|
||||
#include "JsonValue.h"
|
||||
#include "JsonObjectBase.h"
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
|
||||
void JsonValue::writeBooleanTo(StringBuilder& sb)
|
||||
void JsonValue::writeBooleanTo(JsonSink& sb)
|
||||
{
|
||||
sb.append(content.boolean ? "true" : "false");
|
||||
}
|
||||
|
||||
void JsonValue::writeNumberTo(StringBuilder& sb)
|
||||
void JsonValue::writeNumberTo(JsonSink& sb)
|
||||
{
|
||||
sb.append(content.number);
|
||||
char tmp[16];
|
||||
|
||||
_snprintf(tmp, sizeof(tmp), "%lg", content.number);
|
||||
|
||||
sb.append(tmp);
|
||||
}
|
||||
|
||||
void JsonValue::writeObjectTo(StringBuilder& sb)
|
||||
void JsonValue::writeObjectTo(JsonSink& sink)
|
||||
{
|
||||
if (content.object)
|
||||
((JsonObjectBase*) content.object)->writeTo(sb);
|
||||
((JsonObjectBase*) content.object)->writeTo(sink);
|
||||
else
|
||||
sb.append("null");
|
||||
sink.append("null");
|
||||
}
|
||||
|
||||
void JsonValue::writeStringTo(StringBuilder& sb)
|
||||
void JsonValue::writeStringTo(JsonSink& sink)
|
||||
{
|
||||
sb.appendEscaped(content.string);
|
||||
auto s = content.string;
|
||||
|
||||
if (!s)
|
||||
{
|
||||
return sink.append("null");
|
||||
}
|
||||
|
||||
if (!sink.hasRoomFor(2))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sink.append('\"');
|
||||
sink.reserveRoom(1);
|
||||
|
||||
while (*s)
|
||||
{
|
||||
switch (*s)
|
||||
{
|
||||
case '"':
|
||||
sink.append("\\\"");
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
sink.append("\\\\");
|
||||
break;
|
||||
|
||||
case '\b':
|
||||
sink.append("\\b");
|
||||
break;
|
||||
|
||||
case '\f':
|
||||
sink.append("\\f");
|
||||
break;
|
||||
|
||||
case '\n':
|
||||
sink.append("\\n");
|
||||
break;
|
||||
|
||||
case '\r':
|
||||
sink.append("\\r");
|
||||
break;
|
||||
|
||||
case '\t':
|
||||
sink.append("\\t");
|
||||
break;
|
||||
|
||||
default:
|
||||
sink.append(*s);
|
||||
break;
|
||||
}
|
||||
|
||||
s++;
|
||||
}
|
||||
|
||||
sink.releaseRoom(1);
|
||||
sink.append('\"');
|
||||
}
|
Reference in New Issue
Block a user