2012-03-02 3 views
3

Вот пример фид, который я хотел бы разобрать: https://gdata.youtube.com/feeds/api/users/aniBOOM/subscriptions?v=2&alt=jsonСинтаксических данные YouTube с C++ и Jsoncpp

Вы можете проверить это с http://json.parser.online.fr/, чтобы увидеть, что она содержит.

У меня есть небольшая проблема при анализе фида данных, предоставляемого youtube. Первая проблема заключалась в том, что youtube предоставил данные, завернутые в поле фида, и из-за этого я не смог разобрать имя пользователя прямо из исходного json-файла, поэтому мне пришлось анализировать первое поле ввода и генерировать новые данные Json из этого.

В любом случае проблема заключается в том, что по какой-то причине это не включает в себя больше, чем первое имя пользователя, и я не знаю, почему, потому что если вы проверяете этот канал на онлайн-парсере, запись должна содержать все имена пользователей.

`

 data = value["feed"]["entry"]; 
     Json::StyledWriter writer; 
     std::string outputConfig = writer.write(data); 
//This removes [ at the beginning of entry and also last ] so we can treat it as a Json data 
     size_t found; 
     found=outputConfig.find_first_of("["); 
     int sSize = outputConfig.size();    
     outputConfig.erase(0,1); 
     outputConfig.erase((sSize-1),sSize); 

     reader.parse(outputConfig, value2, false); 

     cout << value2 << endl; 

     Json::Value temp; 
     temp = value2["yt$username"]["yt$display"]; 
     cout << temp << endl; 

     std::string username = writer.write(temp); 
     int sSize2 = username.size();   
     username.erase(0,1); 
     username.erase((sSize2-3),sSize2); 

` Но по какой-то причине [] исправить также разрезает данные я генерирующий, если я распечатать данные без удаления [] Я могу видеть всех пользователей, но в этом случае Я не могу извлечь temp = value2 ["yt $ username"] ["yt $ display"];

ответ

3

В JSON скобки обозначают массивы (см. Ссылку here). Вы можете видеть это в онлайн-парсере, а также - Объекты (элементы с одной или несколькими парами ключ/значение {"key1": "value1", "key2": "value2"}) обозначаются синими +/- знаками, а массивы (элементы внутри скобок, разделенные запятыми [{arrayItem1}, {arrayItem2}, {arrayItem3}]) обозначаются красным +/- знаки.

Поскольку запись является массив, вы должны быть в состоянии перебирать их, делая что-то вроде этого:

// Assumes value is a Json::Value 
Json::Value entries = value["feed"]["entry"]; 

size_t size = entries.size(); 
for (size_t index=0; index<size; ++index) { 
    Json::Value entryNode = entries[index]; 
    cout << entryNode["yt$username"]["yt$display"].asString() << endl; 
} 
+0

Да я не знаю, что можно рассматривать как массив ... Ваш пример полностью решена моя проблема. Спасибо огромное! – Mare

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

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