mirror of https://github.com/akheron/jansson
add (ugly) stream support
This commit is contained in:
parent
b98e9d180c
commit
f79a81dad9
21
janssonxx.h
21
janssonxx.h
|
@ -2,6 +2,10 @@
|
|||
#define JANSSONXX_H 1
|
||||
|
||||
#include <string>
|
||||
#include <ostream>
|
||||
#include <istream>
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
|
||||
namespace jansson {
|
||||
|
||||
|
@ -238,4 +242,21 @@ private:
|
|||
|
||||
} // namespace jansson
|
||||
|
||||
// stream JSON value out
|
||||
std::ostream& operator<<(std::ostream& os, const jansson::Value& value) {
|
||||
char* tmp = value.save_string();
|
||||
os << tmp;
|
||||
free(tmp);
|
||||
return os;
|
||||
}
|
||||
|
||||
// read JSON value
|
||||
std::istream& operator>>(std::istream& is, jansson::Value& value) {
|
||||
std::stringstream tmp;
|
||||
while (is)
|
||||
tmp << static_cast<char>(is.get());
|
||||
value = jansson::Value::load_string(tmp.str().c_str());
|
||||
return is;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
11
test.cc
11
test.cc
|
@ -117,5 +117,16 @@ int main() {
|
|||
free(out_cstr);
|
||||
ASSERT_EQ(out, "{\"bar\": 3,\"foo\": \"test\"}\n", "object did not serialize as expected");
|
||||
|
||||
std::istringstream instr(out);
|
||||
instr >> e3;
|
||||
ASSERT_TRUE(e3.is_object(), "e3 is not an object after stream read");
|
||||
ASSERT_EQ(e3.size(), 2, "e3 has wrong size after stream read");
|
||||
ASSERT_EQ(e3.get("bar").as_integer(), 3, "e3.bar has incorrect value after stream read");
|
||||
ASSERT_EQ(e3.get("foo").as_string(), "test", "ee3.test has incorrect value after stream read");
|
||||
|
||||
std::ostringstream outstr;
|
||||
outstr << e3;
|
||||
ASSERT_EQ(instr.str(), "{\"bar\": 3,\"foo\": \"test\"}\n", "object did not serialize as expected");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue