【发布时间】:2010-12-05 16:16:37
【问题描述】:
我在网上使用了一个 JSON 示例,如下所示。
{
"menu": "File",
"commands": [
{
"title": "New",
"action":"CreateDoc"
},
{
"title": "Open",
"action": "OpenDoc"
},
{
"title": "Close",
"action": "CloseDoc"
}
]
}
我尝试在两种不同的解析器中加载它,一种在 C++ 中,一种在 Python 中。
这是 Python 的回溯。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/json/__init__.py", line 267, in load
parse_constant=parse_constant, **kw)
File "/usr/lib/python2.6/json/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.6/json/decoder.py", line 319, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.6/json/decoder.py", line 338, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
这是 jsoncpp 报告的内容。
* Line 1, Column 1
Syntax error: value, object or array expected.
知道我做错了什么吗?
编辑:
好的,这里有一些代码。出于某种原因,现在 Python 正在工作。我什么也没做,就去了商店。这一定是 Python 的一个特性——去商店,随机错误就会消失。那些 Python 开发者是天才。
但切中要害。这是 C++ 代码。
bool CFG::CFG_Init( const char* path ) {
bool r = reader.parse( path, root );
if( r ) {
return true;
} else {
std::cout << reader.getFormatedErrorMessages() << std::endl;
return false;
}
}
我已经尝试过这个,'path' 也是一个 std::string ——同样的事情。我正在调用这样的方法:
if( !CFG_Init("test.json") ) {
error("Couldn't load configuration.");
}
这是课程。
class CFG: virtual Evaluator {
Json::Reader reader;
public:
Json::Value root;
bool CFG_Init( const char* path);
Json::Value CFG_Fetch_Raw(Json::Value section, std::string key, Json::Value defval);
Json::Value CFG_Fetch(Json::Value section, std::string key, Json::Value defval );
};
【问题讨论】:
-
显示你用来解码的代码而不是让我们猜测怎么样?
-
@Paul 我猜他只是在用普通的 JSON 导入器导入东西
-
@Stefano 是的,但是由于 JSON 非常好,可能的罪魁祸首是他的代码(在他如何加载文件或调用 JSON 代码方面)有某种错误。因此,显示他用来加载它的代码将有助于我们诊断问题。
-
到目前为止,我完全同意你们两个。向我们展示代码。问题就在那里。
-
哪里爆炸了?我只是将它复制并粘贴到一个小的 javascript 解释器中,它可以很好地读取您的代码。