1

我正在使用PicoJSON处理从 JavaScript 到 C++ 的 JSON。

如果我有一个带有键和值的 JSON,{"val1":3, "val2":4}我可以获得每个特定键的值,如下所示:

picojson::value v;

const string json2("{\"val1\":3,\"val2\":4}");

int val1 = (int)v.get("val1").get<double>(); // val1 will be equal to 3
int val2 = (int)v.get("val2").get<double>(); // val2 will be equal to 4

问题是我有一来自JavaScript的对象,格式为 JSON,看起来像[{"name": 3},{"name": 1},{"name": 2}]. 所以现在代码将如下所示:

picojson::value v;
const string json1("[{\"name\": 3},{\"name\": 1},{\"name\": 2}]");

我应该对它们进行排序,所以预期的输出应该是:

"[{\"name\": 1},{\"name\": 2},{\"name\": 3}]"
  • 我是否必须使用带有链接列表的“for循环”以某种方式提取该数据以对其进行排序?如果是这样,怎么做?
  • 也许这可以使用正则表达式提取?如果是这样,怎么做?
  • 是否可以将数组转换为数组数组以便对其进行排序?如果是这样,怎么做?
  • 我是否必须构建结构或向量才能获得 C++ 可识别的可排序数据结构?如果是这样,怎么做?

注意:元素的数量会有所不同 - 它可以更大/更小。

编辑:

如果数据结构采用这种形式(就像我使用的那样{"val1":3, "val2":4}),是否可以解决此任务:

{"name3": 3, "name1" : 1, "name2": 2, "name97" : 97, ... }

我可以灵活地更改它,以便 C++ 能够处理它。

那么是否可以遍历每个并按排序?如果是,该怎么做?

4

1 回答 1

0

您可以将数据放入向量中并对其进行排序。

array arr = v.get<array>();
vector<int> vi;
for (array::const_iterator it = arr.begin(); it != arr.end(); ++it) {
  vi.push_back((int)(*it).get("name").get<double>());
}
sort(vi.begin(), vi.end());

stringstream ss;
vector<int>::const_iterator it;
for (ss<<"[", it = vi.begin(); (it+1) != vi.end(); ++it) {
  ss<<"{\"name\": "<<(*it)<<"},";
}
ss<<"{\"name\": "<<(*it)<<"}]";

cout<<"Output: "<<ss.str()<<endl;

这是输出:

Input:  [{"name": 3},{"name": 1},{"name": 2}]
Output: [{"name": 1},{"name": 2},{"name": 3}]
于 2013-08-14T08:59:35.960 回答