Добрый день. (Вопрос выглядит громоздко, постарался максимально упростить) Пытаюсь запустить парсер для текста размеченного JSON (JavaScript Object Notation http://json.org/ , в википедии http://ru.wikipedia.org/wiki/JSON) . Выбрал TinyJSON (http://blog.beef.de/projects/tinyjson/) Скачал boost версии 1.35. Настроил пути, собрал и протрансировал код | Код | #include <stdlib.h> #include <stdio.h> #include <conio.h> #include "tinyjson.hpp"
typedef std::string Iterator;
int main(void) { Iterator strInput = " { \"zero\": 0,\"one\": 1}" ; //strInput << "hello"; //std::string printf("hello world"); // strInput contains the JSON code as std::string json::grammar<char>::variant v = json::parse(strInput.begin(), strInput.end()); if(v->type() != typeid(json::grammar<char>::object)) { // ERROR: parsing failed (bad format) return false; } // traverse(&v); // further processing of the JSON object model
}
|
Вроде прошло без ошибок. Затем подключил функцию traverse, | Код | void traverse(json::grammar<char>::array const * var) { if(var->empty()) { // variant is empty => it's a "null" value } else if(var->type() == typeid(bool)) { // variant is of type "bool"... bool bValue = boost::any_cast< bool >(*var); } else if(var->type() == typeid(int)) { // variant is of type "int"... int iValue = boost::any_cast< int >(*var); } else if(var->type() == typeid(double)) { // variant is of type "double"... double dValue = boost::any_cast< double >(*var); } else if(var->type() == typeid(std::string)) { // variant is a string... std::string strValue = boost::any_cast< std::string >(*var); } else if(var->type() == typeid(json::grammar<char>::array)) { // variant is an array => use recursion json::grammar<char>::array const & a = boost::any_cast< json::grammar<char>::array >(*var); for(json::grammar<char>::array::const_iterator it = a.begin(); it != a.end(); ++it) { traverse(*it); } } else if(var->type() == typeid(json::grammar<char>::object)) { // variant is an object => use recursion json::grammar<char>::object const & o = boost::any_cast< json::grammar<char>::object >(*var); for(json::grammar<char>::object::const_iterator it = o.begin(); it != o.end(); ++it) { std::string strName = (*it).first; traverse((*it).second); } } else { // ERROR: unknown type... } }
|
В результате сборки появляются ошибки: | Код | n.cpp(14) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(19) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(24) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(29) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(34) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(41) : error C2664: 'traverse' : cannot convert parameter 1 from 'const std::allocator<_Ty>::value_type' to 'const json::grammar<Char>::array *' with [ _Ty=json::grammar<Char>::variant ] and [ Char=char ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(44) : error C2039: 'type' : is not a member of 'std::deque<_Ty>' with [ _Ty=json::grammar<Char>::variant ] c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(52) : error C2664: 'traverse' : cannot convert parameter 1 from 'const json::grammar<Char>::variant' to 'const json::grammar<Char>::array *' with [ Char=char ] and [ Char=char ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called c:\documents and settings\dealer\рабочий стол\tinyjsontest\main.cpp(78) : error C2664: 'traverse' : cannot convert parameter 1 from 'json::grammar<Char>::variant *' to 'const json::grammar<Char>::array *' with [ Char=char ] and [ Char=char ] Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
|
Помогите собрать демонстрационный пример. ------- Доп. сведения: Windows XP, VC7 Пример в приложении.
Присоединённый файл ( Кол-во скачиваний: 4 )
tinyjsontest.rar 5,96 Kb
|