2015-11-25 2 views
3

ну я думаю, что вопрос конкретно, я хочу, чтобы пройти через массив, который находится в .json, который имеет вид:Как просмотреть массив, который находится внутри .json, используя quickjson? (Cocos2d-х)

{ "N" : 5, "Rotacion" : 42, "Igual" : 20, "Inverso" : 0, "RotacionE" : 47, "Espejo" : 22, "Puntuacion" : 0, "_id" : "563b7b4756ab632f47fe6d7f" , "Lados" : [], "Camino" : [ 6, 5, 4, 21, 22, 7, 2, 3, 20, 23, 8, 1, 18, 19, 24, 9, 0, 17, 16, 15, 10, 11, 12, 13, 14 ], "__v" : 0 } 

Я искал некоторые учебники и они говорят мне выполните следующие действия:

const Value& a = document["a"]; 
assert(a.IsArray()); 
for (SizeType i = 0; i < a.Size(); i++) // Uses SizeType instead of size_t 
    printf("a[%d] = %d\n", i, a[i].GetInt()); 

проблема с этим примером является то, что при компиляции я получаю следующее сообщение об ошибке:

/home/jmuniz/code/Cocos2d-x/interface/Classes/HelloWorldScene.cpp:84:7: error: reference to ‘Value’ is ambiguous 
const Value& a = d["Camino"]; 

И

/home/jmuniz/code/Cocos2d-x/interface/cocos2d/cocos/base/CCValue.h:54:14: note: candidates are: class cocos2d::Value 
    class CC_DLL Value 
       ^
In file included from /home/jmuniz/code/Cocos2d-x/interface/Classes/HelloWorldScene.cpp:4:0: 
/home/jmuniz/Dev/rapidjson-master/include/rapidjson/document.h:1758:31: note:     typedef class rapidjson::GenericValue<rapidjson::UTF8<> > rapidjson::Value 
    typedef GenericValue<UTF8<> > Value; 
           ^
/home/jmuniz/code/Cocos2d-x/interface/Classes/HelloWorldScene.cpp:84:7: error: ‘Value’ does not name a type 
    const Value& a = d["Camino"]; 

здесь я положил кусок кода, который открывает .json, так что вы canhave представление о том, что я делаю

FILE* fp = fopen("/home/jmuniz/code/Cocos2d-x/interface/Resources/res/puzzles(copia).json", "r"); // non-Windows use "r" 
char readBuffer[65536]; 
FileReadStream is(fp, readBuffer, sizeof(readBuffer)); 
Document d; 
d.ParseStream(is); 
fclose(fp); 

пожалуйста, мне нужно знать, почему произошла ошибка? или, по крайней мере, рассказать мне, как получить доступ к массиву для печати, а затем манипулировать

ответ

1

Это потому, что существует два типа с таким же именем: Value.

Чтобы устранить двусмысленность, используйте вместо этого rapidjson::Value или введите typedef новое имя.

1
string josn="{ \"N\" : 5, \"Rotacion\" : 42, \"Igual\" : 20, \"Inverso\" : 0, \"RotacionE\" : 47, \"Espejo\" : 22, \"Puntuacion\" : 0, \"_id\" : \"563b7b4756ab632f47fe6d7f\" , \"Lados\" : [], \"Camino\" : [ 6, 5, 4, 21, 22, 7, 2, 3, 20, 23, 8, 1, 18, 19, 24, 9, 0, 17, 16, 15, 10, 11, 12, 13, 14 ], \"__v\" : 0 }"; 
    rapidjson::Document doc; 
    if (!doc.Parse<0>(josn.c_str()).HasParseError()) { 
     const rapidjson::Value& myArray=doc["Camino"]; 
     vector<int> Camino; 
     if (myArray.GetType()==rapidjson::kArrayType) { 
      for (int i=0; i<myArray.Size(); i++) { 
       Camino.push_back(myArray[i].GetInt()); 
      } 
      for (auto it=Camino.begin(); it!=Camino.end(); it++) { 
       printf("%d\n",*it); 
      } 
     } 

    }else{ 
     printf("1 error parsing the json %zu\n",doc.GetErrorOffset()); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^