Jsoncpp перестанет писать на основе элементов в алфавитном порядке - PullRequest
4 голосов
/ 28 сентября 2011

Я использую Jsoncpp для записи значения Json :: в строку, используя 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));

Проблема в том, что они не отображаются в строке, как в том порядке, в котором я добавил их в val Json :: value, они сортируются по алфавиту в зависимости от первой буквы в каждом элементе («имя, фамилия, lookx, looky, lookz, x "и т. д.). Как вы можете предотвратить это? Я хочу, чтобы он был добавлен в том порядке, в котором я добавляю его в значение Json :: и НЕ сортируется.

Если это невозможно, как можно изменить исходный код для его достижения?

Спасибо

1 Ответ

5 голосов
/ 28 сентября 2011

Скорее всего, Jsoncpp использует std::map для хранения пар ключ / значение, и он вернет вам упорядоченные в алфавитном порядке пары ключ / значение.Я не изучал код Jsoncpp, но у вас есть две альтернативы:

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

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

...