使用json c ++的输出在字段中获取奇怪的字符

Posted

技术标签:

【中文标题】使用json c ++的输出在字段中获取奇怪的字符【英文标题】:Getting strange characters in fields with output from json c++ 【发布时间】:2017-09-26 07:39:34 【问题描述】:

我正在使用从 .get(movie) 函数接收到的 json 值来获取 json 电影对象中每个键的值。我正在尝试将其输出到 fltk GUI 中的字段中,该字段需要为 const char * 类型。但是,我得到的是奇怪的字符而不是我的价值观。这里有明显的问题吗?

 Json::Value result = m.get(movie);
 std::cout << result << endl;
 const char *released = result.get("Released", "NULL").asCString();
 releasedInput->value(released);
 const char *rated = result.get("Rated", "NULL").asCString();
 ratedInput->value(rated);
 Json::Value actors = result.operator[]("Actors");
 const char *plot = result.get("Plot", "NULL").asCString();
 plotMLIn->value(plot);
 const char *runtime = result.get("Runtime", "NULL").asCString();
 runtimeInput->value(runtime);
 Json::Value genre = result.operator[]("Genre");
 const char *filename = result.get("Filename", "NULL").asCString();
 filenameInput->value(filename);
 const char *title = result.get("Title", "NULL").asCString();
 titleInput->value(title)

我只在我的函数中粘贴了相关行。如果需要更多说明,我很乐意提供。

【问题讨论】:

你试过调试你的代码吗?试图在调试器中逐行执行代码,同时监视变量及其值?哪些字符串是错误的? 如何他们错了?你期待什么文本,你实际上得到了什么? 对于 #1,当我使用 std::string 时,我收到错误消息,它们必须是 const char * 类型,所以我更改了它。对于 #2,这是因为我只是在学习这一点,而且从文档来看,这似乎是要做的事情。 哦,你为什么要显式调用operator[] 作为一个函数?为什么不呢? result["Actors"]? 我会改变这一点 就像我说的,我是新手,所以我一定误解了 Json::Value 的文档。我正在那里接收一个数组。 【参考方案1】:

您应该将结果保存在std::string 中,然后对该字符串调用c_str() 以获取C 字符串。如果您链接这些调用并立即保存指针,或者只执行asCString(),则保存 C 字符串指向的内存的字符串对象将被清除,您将在代码中调用未定义的行为,这不是您想要的。

I.E

std::string runtime = result.get("Runtime", "NULL").asString();
runtimeInput->value(runtime.c_str());

【讨论】:

【参考方案2】:

我明白了。我只需要更改 .asCString();到 asString().c_str();

我确信有一种更雄辩的方法可以做到这一点,但正如我所说,我是新手。

【讨论】:

这只会看起来有效,它仍然是未定义的行为。

以上是关于使用json c ++的输出在字段中获取奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# --> asp.net web api 在 json 中获取分层输出

在 Http Header 中使用 Json 字符串

使用getchar()获取字符串

如何使用C#在数组mongoDB中获取子文档

在 Python 中使用 GraphQL 过滤 JSON 数据

如何从在 C 中存储 shell 脚本输出的指针获取多个字符串?