在C ++中访问JSON值

时间:2016-07-18 21:31:20

标签: c++ json

我正在尝试编写一个程序,在虚幻引擎中为一个小应用程序导航本地光盘。我已经使用Gradle整理了一个REST服务器,长话短说,我给了一个带有机器目录的JSON。我想拉出特定的目录名称,以字符串形式返回(特别是FText,但这里不太重要)数组。

我在github(https://github.com/nlohmann/json)上找到了由nLohmann创建的库,这似乎是在c ++中处理JSON的最佳方法。然而,对于我的生活,我无法弄清楚如何拉出目录名称。我试过一个迭代器和一个简单的.value()调用。

下面是代码和JSON示例,非常感谢任何见解。

char buffer[1024];

FILE *lsofFile_p = _popen("py C:\\Users\\jinx5\\CWorkspace\\sysCalls\\PullRoots.py", "r");
fgets(buffer, sizeof(buffer), lsofFile_p);
_pclose(lsofFile_p);

std::string rootsJson(buffer);
string s = rootsJson.substr(1);
s = ReplaceAll(s, "'", "");

//here my string s will contain: [{"description":"Local Disk","name":"C:\\"},{"description":"Local Disk","name":"D:\\"},{"description":"CD Drive","name":"E:\\"}]


//These are two syntax examples I found un nlohmann's docs, neither seems to work 
auto j = json::parse(s);
string descr = j.value("description", "err");

1 个答案:

答案 0 :(得分:2)

我认为您的问题来自您的文字字符串中\的数量。 \C:\\需要5 C:\\\\\

这是一个有效的例子:

#include "json.hpp"
#include <string>

using namespace std;
using json = nlohmann::json;

int main(){

    json j = json::parse("[{\"description\":\"Local Disk\",\"name\":\"C:\\\\\"},{\"description\":\"Local Disk\",\"name\":\"D:\\\\\"},{\"description\":\"CD Drive\",\"name\":\"E:\\\\\"}]");

    cout << j.is_array() << endl;

    for (auto& element : j) {
      std::cout << "description : " << element["description"] << " | " << " name : "  << element["name"] << '\n';
    }
    return 0;
}