Jsoncpp перестает заставлять его записывать на основе алфавитного порядка элементов

#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, но у вас есть две альтернативы:

  1. Измените код, чтобы использовать внутри a std::list или какой-либо другой упорядоченный контейнер ( vector и т.д.). Это может привести к снижению производительности.
  2. Сохраните порядок ключей, которые вы хотите вывести, и создайте вывод самостоятельно.

Однако, как вы, возможно, знаете, порядок ключей в JSON не указан, поэтому, если вы полагаетесь на этот факт, вам следует пересмотреть дизайн своего приложения.