使用REST API的JSON分阶段

JSON phasing with REST API

本文关键字:JSON 分阶段 API REST 使用      更新时间:2023-10-16

我正试图在REST API的JSON功能#include <cpprest/json.h>的JSON文件中读取第二级

我需要从以下JSON中获取名称字段:

{"desc":"","id":"57681f5dc4864c821cc73bfa","lists":[{"id":"576973346263056c88cfe845","name":"Board info"},{"id":"57681f5dc4864c821cc73bfb","name":"Misc"},{"id":"576978294972d812e4a91580","name":"thing"},{"id":"57681fdc228443c3306cc762","name":"thing2"},{"id":"5768200b1fbf41dd2c974052","name":"thing3"},{"id":"57681feb72ca90abb3afe170","name":"thingy"},{"id":"57681f5dc4864c821cc73bfc","name":"meep"},{"id":"57681f5dc4864c821cc73bfd","name":"BannedWordsPhrases"},{"id":"57681fba60fdfbf576abaece","name":"Errors"}],"name":"READER"}

(让我们把这个文件命名为JSON1)我可以得到JSON1["lists"],但不能得到JSON1["lists"]["name"]。

下面是我的代码:
#include "cpprest/json.h" //how I am importing stuff
...
typedef web::json::value JsonValue; //all of these are being uses
typedef web::json::value::value_type JsonValueType;
typedef std::wstring String;
typedef std::wstringstream StringStream;
using namespace utility;
using namespace web;
using namespace web::http;
using namespace web::http::client;
using namespace concurrency::streams;
...
int main() 
{ 
...
web::json::value J1 = web::json::value::parse(S);
web::json::value &J2 = web::json::value::parse(S1);
output(J2);
wfstream _file("jsonFile.json");
_file >> obj;
wcout << obj[L"lists"][L"name"]; // the broken line
cout << endl;
}

所有的函数和变量都是正确的,它在没有[L"name"]和有[L"lists"]的情况下起作用。

我做错了什么?

:我的答案可能是错误的,如果你能发布wcout << obj[L"lists"];的输出将会有所帮助。此外,我假设您正在试图获得"名称",如"董事会信息"answers"麦克风",而不是"读者"。我假设wcout << obj[L"lists"];的输出是:

[{"id":"576973346263056c88cfe845","name":"Board info"},{"id":"57681f5dc4864c821cc73bfb","name":"Misc"},{"id":"576978294972d812e4a91580","name":"thing"},{"id":"57681fdc228443c3306cc762","name":"thing2"},{"id":"5768200b1fbf41dd2c974052","name":"thing3"},{"id":"57681feb72ca90abb3afe170","name":"thingy"},{"id":"57681f5dc4864c821cc73bfc","name":"meep"},{"id":"57681f5dc4864c821cc73bfd","name":"BannedWordsPhrases"},{"id":"57681fba60fdfbf576abaece","name":"Errors"}]

建议答案: obj[L"lists"];在本例中返回9个JSON对象的列表(如上所列)。您可以通过索引(0-8)访问这些JSON对象。例如,根据cpprestsdk, obj[L"lists"][0];obj[L"lists"].at(0);应该返回{"id":"576973346263056c88cfe845","name":"Board info"}

您可以从那里获得名称,例如:

obj[L"lists"][0][L"name"]应该返回Board info