#c #json #jsoncpp
#c #json #jsoncpp
Вопрос:
Я использую Jsoncpp для записи Json::value в строку с помощью Json::FastWriter.
string s;
s.append("me?json=");
val["firstname"] = firstname;
val["lastname"] = lastname;
val["x"] = me->myPos.X;
val["y"] = me->myPos.Y;
val["z"] = me->myPos.Z;
val["lookx"] = me->myOri.X;
val["looky"] = me->myOri.Y;
val["lookz"] = me->myOri.Z;
url.append(writer.write(val));
Проблема в том, что они не отображаются в строке в том порядке, в котором я добавил их в Json::value val, они, похоже, отсортированы в алфавитном порядке в зависимости от первой буквы в каждом элементе («firstname, lastname, lookx, looky, lookz, x»И т. Д.). Как вы это предотвратите? Я хочу, чтобы он добавлялся в том порядке, в котором я добавляю его в Json::value, а НЕ сортировался.
Если это невозможно, как можно изменить исходный код для его достижения?
Спасибо
Ответ №1:
Скорее всего, Jsoncpp использует a std::map
для хранения пар ключ / значение, и он вернет вам упорядоченные в алфавитном порядке пары ключ / значение. Я не изучал код Jsoncpp, но у вас есть две альтернативы:
- Измените код, чтобы использовать внутри a
std::list
или какой-либо другой упорядоченный контейнер (vector
и т.д.). Это может привести к снижению производительности. - Сохраните порядок ключей, которые вы хотите вывести, и создайте вывод самостоятельно.
Однако, как вы, возможно, знаете, порядок ключей в JSON не указан, поэтому, если вы полагаетесь на этот факт, вам следует пересмотреть дизайн своего приложения.