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_float の代わりに as_int を使用すると、データが正しく解析されます。このバグは 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 に答える