3

解析したいフィードの例を次に示します: https ://gdata.youtube.com/feeds/api/users/aniBOOM/subscriptions?v = 2&alt = json

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 "];

4

1 に答える 1

3

JSONでは、角かっこは配列を示します(ここで参照してください)。これはオンラインパーサーでも確認できます。オブジェクト(1つ以上のキー/値のペアを持つアイテム{"key1": "value1", "key2": "value2"})は青い+/-記号で示され、配列(コンマで区切られた括弧内のアイテム[{arrayItem1}, {arrayItem2}, {arrayItem3}])は赤い+/-記号で示されます。 。

Since entry is an Array, you should be able to iterate through them by doing something like this:

// 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;
}
于 2012-03-21T21:02:39.013 に答える