我正在尝试使用RapidJSON解析从服务器收到的数据。以下是收到的确切字符串:
[
{
"Node": "9478149a08f9",
"Address": "172.17.0.2",
"ServiceID": "HSS",
"ServiceName": "HSS",
"ServiceTags": [],
"ServiceAddress": "",
"ServicePort": 6666,
"ServiceEnableTagOverride": false,
"CreateIndex": 2855,
"ModifyIndex": 2855
}
]
以下是代码
int main(void)
{
CURL *curl;
CURLcode res;
struct MemoryStruct chunk;
chunk.memory = (char *)malloc(1); /* will be grown as needed by the realloc above */
chunk.size = 0; /* no data at this point */
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
/* First set the URL that is about to receive our POST. This URL can
just as well be a https:// URL if that is what should receive the
data. */
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8500/v1/catalog/service/HSS");
/* Now specify the POST data */
// Set the callbackfunction to handle the JSON string
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
std::string str;
str.assign(chunk.memory,chunk.size);
cout<<"The string response is :"<<str<<endl;
Document d;
d.Parse(str.c_str());
assert(d.IsObject());
&lt; - 它在这里失败
JSON数据有效,但不确定为什么它仍然失败。
答案 0 :(得分:1)
您的JSON字符串是数组。因此,如果您检查file:///
它失败了。仔细看看JSON字符串,你会发现你关心的是IsObject()
,它表明它是一个数组。
从JSON官方网站获取:
数组以[(左括号)开头,以]结尾(右括号)。 值以(逗号)分隔。
请尝试以下代码:
[]