我的代码崩溃(调试错误!R6010 abort()已被调用)。你能帮助我吗?我还想知道如何从字符串值初始化json对象。
<% Product.all.each do |product| %>
.
.
.
<ul class="microposts">
<%product.microposts.each do |micropost| %>
<li><%=micropost.content%></li>
<% end %>
</ul>
答案 0 :(得分:27)
你好,很简单:
1 - 您需要一个CPP JSON值对象(Json :: Value)来存储您的数据
2 - 使用Json Reader(Json :: Reader)读取JSON字符串并解析为JSON对象
3 - 做你的东西:)
以下是执行这些步骤的简单代码:
#include <stdio.h>
#include <jsoncpp/json/json.h>
#include <jsoncpp/json/reader.h>
#include <jsoncpp/json/writer.h>
#include <jsoncpp/json/value.h>
#include <string>
int main( int argc, const char* argv[] )
{
std::string strJson = "{\"mykey\" : \"myvalue\"}"; // need escape the quotes
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( strJson.c_str(), root ); //parse process
if ( !parsingSuccessful )
{
std::cout << "Failed to parse"
<< reader.getFormattedErrorMessages();
return 0;
}
std::cout << root.get("mykey", "A Default Value if not exists" ).asString() << std::endl;
return 0;
}
编译:g ++ YourMainFile.cpp -o main -l jsoncpp
我希望它有所帮助;)
答案 1 :(得分:6)
Json::Reader
已弃用,如documentation中所述。以下是Json::CharReader
和Json::CharReaderBuilder
的使用方法:
std::string strJson = R"({"foo": "bar"})";
Json::CharReaderBuilder builder;
Json::CharReader* reader = builder.newCharReader();
Json::Value json;
std::string errors;
bool parsingSuccessful = reader->parse(
strJson.c_str(),
strJson.c_str() + strJson.size(),
&json,
&errors
);
delete reader;
if (!parsingSuccessful) {
std::cout << "Failed to parse the JSON, errors:" << std::endl;
std::cout << errors << std::endl);
return;
}
std::cout << json.get("foo", "default value").asString() << std::endl;
感谢p-a-o-l-o的回答:Parsing JSON string with jsoncpp