以前一直用的jsoncpp,各种好用。
考虑到效率,现在想迁移到RapidJSON,可是发现真的不会用,官方文档也看了,还是有疑问。因为觉得是自己的使用问题,发到GitHub上感觉不太合适,所以就发到这里了。请各位轻喷。
版本:试过master和1.0.1
问题1:
为什么以下的写法不对:
Document doc;
doc.SetObject();
Value v(kArrayType);
doc.AddMember("array1", v, doc.GetAllocator());
必须使用这种方式才行:
Document doc;
doc.SetObject();
Value v;
doc.AddMember("array1", v, doc.GetAllocator());
doc["array1"].SetArray();
问题2:
为什么以下代码段生成的json跟预想中的不一样
Document doc;
doc.SetObject();
Value v;
doc.AddMember("array1", v, doc.GetAllocator());
doc["array1"].SetArray();
for (int i = 0; i < 2; i++) {
Value obj;
doc["array1"].PushBack(obj, doc.GetAllocator());
doc["array1"][i].SetObject();
Value arrayOfObj;
doc["array1"][i].AddMember("array2", arrayOfObj, doc.GetAllocator());
doc["array1"][i]["array2"].SetArray();
for (int j = 0; j < 2; j++) {
Value obj1;
doc["array1"][i]["array2"].PushBack(obj1, doc.GetAllocator());
doc["array1"][i]["array2"][j].SetObject();
}
}
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
doc.Accept(writer);
const char* outputJson = buffer.GetString();
最后生成的json是:
{
"array1":
[
{
"array2":
[
{},
null
]
},
null
]
}
预想中的应该是:
{
"array1":
[
{
"array2":
[
{},
{}
]
},
{
"array2":
[
{},
{}
]
},
]
}
1
linux40 2015-05-06 07:30:46 +08:00 via Android
知乎上有作者?
|
2
laoyur OP 貌似作者也在v2,求火力支援,@ miloyip
|
3
laoyur OP 上一条没@ 到,重发一下,@miloyip
|
4
miloyip 2015-05-06 10:13:32 +08:00
第一个没问题:
~~~cpp TEST(Document, laoyur) { Document doc; doc.SetObject(); Value v(kArrayType); doc.AddMember("array1", v, doc.GetAllocator()); StringBuffer s; Writer<StringBuffer> writer(s); doc.Accept(writer); std::cout << s.GetString() << std::endl; } ~~~ ~~~ {"array1":[]} ~~~ |
5
miloyip 2015-05-06 10:17:11 +08:00
刚测了,第二个也没问题啊……
{"array1":[{"array2":[{},{}]},{"array2":[{},{}]}]} |
6
miloyip 2015-05-06 10:19:20 +08:00
你先看看是否有其他环境原因。之后我才解释,这种调用方法不太高效,怎么改进。
|
7
laoyur OP @miloyip 感谢作者亲临现场,👏
之所以会有问题1,是因为如果把问题2中的代码全部换成问题1中的“错误”形式后,运行时直接崩了,挂在IsObject的断言处。 考虑到问题2的奇怪表现,怀疑问题1也是因为问题2而牵连到了。 考虑环境因素的话,我环境如下: XCode 6.2 Apple LLVM 6.0, iOS 8, cocos2dx 3.3,c++11,rapidjson版本master和1.0.1都试过 cocos2dx其实自带rapidjson,不过版本较旧,我代码中使用了github版本的rapidjson |
8
laoyur OP @miloyip 我重新建了个没有cocos2dx环境的工程,使用一模一样的compiler设置,问题2中的测试代码能正常运行,问题1也不复存在
|
9
miloyip 2015-05-06 16:30:31 +08:00
我不介意你把问题写在issue里,集中在一个地方,可能对其他人也会有帮助。
|