}
break;
case json::is_object:
{
json::object const &obj=object();
object::const_iterator p,end;
p=obj.begin();
end=obj.end();
indent(out,'{',tabs);
while(p!=end) {
out<
indent(out,':',tabs);
p->second.write_value(out,tabs);
++p;
if(p!=end)
indent(out,',',tabs);
}
indent(out,'}',tabs);
}
break;
default:
throw bad_value_cast("Unknown type found: internal error");
}
}
上面的代码包含了很多细节,很多都可以独立成文描述。这里主要是为了搞明白cppcms::json::value内部的设计原理,便于更好的使用。就暂时追踪到这里。
将JSON字符串转换成C++对象
下面的代码演示了如何将流里面的JSON串放入value对象,然后通过get方法查找,"null"是假定找不到的时候的默认值。
stringstream stream;
stream << "{\"message\":\"ok\",\"status\":0}";
cppcms::json::value value2;
stream >> value2;
string m = value2.get("message","null");
也可以用更严格的get方法的重载,没有默认值,如果找不到就会抛出bad_cast异常。
///
/// Get an object of type T from the path \a path. Throws bad_value_cast if such path does not
/// exists of conversion can't be done
///
template
T get(std::string const &path) const
{
return at(path).get_value
}
我不喜欢写篇幅很大的文章,本篇主要描述如何使用,顺便挖了一下源代码。后面会陆续深挖CppCMS的源代码。
摘自 sheismylife的专栏