add (ugly) stream support

This commit is contained in:
Sean Middleditch 2010-01-12 15:29:45 -08:00
parent b98e9d180c
commit f79a81dad9
2 changed files with 32 additions and 0 deletions

View File

@ -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
View File

@ -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;
}