0

我正在尝试解析以下 JSON 数据(使用 JSON.stringify 创建)。我正在使用 libJSON 7。我的代码如下:

wstring jsonstr = _T("{\"Id\":0,\"Note\":\"\",\"Username\":\"user\",\"Password\":\"pass\",\"Enabled\":true,\"ProfileId\":\"\",\"UserAgent\":\"\",\"LastUsage\":0,\"Failures\":0,\"Abuses\":0}");
JSONNode jsondata = libjson::parse(jsonstr);
auto i = jsondata.begin();
auto num = i->as_float();
int idIsNan = _isnan(num);// Nonzero here

现在我希望 num == (double)0,但是,它等于 1.#QNAN00000000000。有谁知道如何绕过这个错误?此外,如果我使用 as_int 而不是 as_float,它会正确解析数据;所以,看起来这个错误只发生在 as_float 方法上。

4

1 回答 1

0

我在这里猜测了一下,因为您没有显示所有相关代码:

您的 json 结构是datajson似乎是您正在解析的字符串。所以json.begin()将是该字符串中的第一个字符,而不是第一个 json 值。由于第一个字符是双引号,因此不能将其解析为浮点数->您会看到胡说八道。也许这就是你想要的:

JSONNode data = libjson::parse(json);
auto i = data.begin();  //<-- data, not json!
auto num = i->as_float();

请记住下次提供所有相关代码,包括所有使用变量的定义(在本例中为“json”)。

PS:您发布的 json 字符串以不匹配结尾}- 这可能会使解析器感到困惑。

于 2013-01-16T09:53:09.193 回答