xrpld
Loading...
Searching...
No Matches
libxrpl/json/Output.cpp
1#include <xrpl/json/Output.h>
2
3#include <xrpl/json/Writer.h>
4#include <xrpl/json/json_value.h>
5
6#include <string>
7
8namespace json {
9
10namespace {
11
12void
13outputJson(Value const& value, Writer& writer)
14{
15 switch (value.type())
16 {
17 case ValueType::Null: {
18 writer.output(nullptr);
19 break;
20 }
21
22 case ValueType::Int: {
23 writer.output(value.asInt());
24 break;
25 }
26
27 case ValueType::UInt: {
28 writer.output(value.asUInt());
29 break;
30 }
31
32 case ValueType::Real: {
33 writer.output(value.asDouble());
34 break;
35 }
36
37 case ValueType::String: {
38 writer.output(value.asString());
39 break;
40 }
41
42 case ValueType::Boolean: {
43 writer.output(value.asBool());
44 break;
45 }
46
47 case ValueType::Array: {
48 writer.startRoot(Writer::CollectionType::Array);
49 for (auto const& i : value)
50 {
51 writer.rawAppend();
52 outputJson(i, writer);
53 }
54 writer.finish();
55 break;
56 }
57
58 case ValueType::Object: {
59 writer.startRoot(Writer::CollectionType::Object);
60 auto members = value.getMemberNames();
61 for (auto const& tag : members)
62 {
63 writer.rawSet(tag);
64 outputJson(value[tag], writer);
65 }
66 writer.finish();
67 break;
68 }
69 } // switch
70}
71
72} // namespace
73
74void
75outputJson(Value const& value, Output const& out)
76{
77 Writer writer(out);
78 outputJson(value, writer);
79}
80
82jsonAsString(Value const& value)
83{
85 Writer writer(stringOutput(s));
86 outputJson(value, writer);
87 return s;
88}
89
90} // namespace json
Represents a JSON value.
Definition json_value.h:130
Writer implements an O(1)-space, O(1)-granular output JSON writer.
JSON (JavaScript Object Notation).
Definition json_errors.h:5
void outputJson(json::Value const &, Output const &)
Writes a minimal representation of a Json value to an Output in O(n) time.
std::string jsonAsString(json::Value const &)
Return the minimal string representation of a json::Value in O(n) time.
@ UInt
unsigned integer value
Definition json_value.h:21
@ Int
signed integer value
Definition json_value.h:20
@ String
UTF-8 string value.
Definition json_value.h:23
@ Boolean
bool value
Definition json_value.h:24
@ Array
array value (ordered list)
Definition json_value.h:25
@ Object
object value (collection of name/value pairs).
Definition json_value.h:26
@ Real
double value
Definition json_value.h:22
@ Null
'null' value
Definition json_value.h:19
std::function< void(boost::beast::string_view const &)> Output
Output stringOutput(std::string &s)