Невозможно обработать массив массивов с плавающей точкой с rapidjson - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу проанализировать следующий массив массивов, используя команду json. Моя кодовая среда VS2019 с Unreal Engine v4.24.3. Я новичок в C ++.

const char* json = "{ \"data\":[[0.0,1.1],[2.1,3.1]] }";

Я уже ссылался на Rapid json, получить значение внутри массива другого массива & Обработка массивов массивов целых чисел с быстрым json

Для массива integer следующий код работает нормально.

const char* json = "{ \"data\":[[0,1],[2,3]] }";

Document d;
d.Parse(json);

const rapidjson::Value& b = d["data"];

for (rapidjson::SizeType i = 0; i < b.Size(); i++)
{
    const rapidjson::Value& c = b[i];
    UE_LOG(LogTemp, Log, TEXT("%d: Test Data"), c[rapidjson::SizeType(0)].GetInt());
}

Возвращает ->

LogTemp: 0: Test Data //Expected values
LogTemp: 2: Test Data

Но для массива массивов со значениями Float следующий код не работает.

const char* json = "{ \"data\":[[0.5,1.1],[2.1,3.1]] }";

Document d;
d.Parse(json);

const rapidjson::Value& b = d["data"];

for (rapidjson::SizeType i = 0; i < b.Size(); i++)
{
    const rapidjson::Value& c = b[i];
    UE_LOG(LogTemp, Log, TEXT("%d: test Data"), c[rapidjson::SizeType(0)].GetFloat());
}

возвращает ->

LogTemp: 0: test Data
LogTemp: -1073741824: test Data

Как я могу выяснить это? Чего мне не хватает?

1 Ответ

0 голосов
/ 30 апреля 2020

для типа данных с плавающей запятой следует использовать спецификатор с плавающей запятой% f.

const char* json = "{ \"data\":[[0.5,1.1],[2.1,3.1]] }";

Document d;
d.Parse(json);

const rapidjson::Value& b = d["data"];

for (rapidjson::SizeType i = 0; i < b.Size(); i++)
{
    const rapidjson::Value& c = b[i];
    UE_LOG(LogTemp, Log, TEXT("%f: test Data"), c[rapidjson::SizeType(0)].GetFloat());
}
...