0

私はここで少し頭を抱えています(実際にはたくさんあります)。NSDictionaryに変換されたJSON応答があります。ネストされた配列と配列内の辞書内の辞書などの混乱です...私はそれをどうするかわかりません。私がやりたいのは、「アイテム」ごとに単純なNSDictionaryを作成し、プロパティを使用してUITableViewを駆動することです。数レベル下のオブジェクトにアクセスする方法がわかりません。少し検索してみましたが、いくつかの方法(高速列挙、ブロックなど)があることがわかりましたが、ホイールを回転させる前に、特定の状況に最適な方法を知りたいと思います。NSDictionaryを読みやすくするためのplistとして保存しました。ここに投稿します:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>search_result</key>
    <dict>
        <key>latitude</key>
        <string>51.508129</string>
        <key>longitude</key>
        <string>-0.128005</string>
        <key>page</key>
        <string>1</string>
        <key>per_page</key>
        <integer>3</integer>
        <key>results</key>
        <array>
            <dict>
                <key>result</key>
                <dict>
                    <key>description_short</key>
                    <string>Experience the history and mystery of the most famous sites in the South of England!</string>
                    <key>flex_reference</key>
                    <string>FLX-LON-77B-D2F-5ED5</string>
                    <key>geocoded_latitude</key>
                    <string>51.5081289</string>
                    <key>geocoded_longitude</key>
                    <string>-0.128005</string>
                    <key>name</key>
                    <string>Stonehenge, Glastonbury, Avebury and Chalice Well</string>
                    <key>primary_image</key>
                    <string>http://media.****.com/FLX-LON-77B-D2F-5ED5-image_original-56.jpg</string>
                    <key>product_categories</key>
                    <array>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>type</string>
                                <key>name</key>
                                <string>Sightseeing Tours</string>
                            </dict>
                        </dict>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>category</string>
                                <key>name</key>
                                <string>Excursion</string>
                            </dict>
                        </dict>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>type</string>
                                <key>name</key>
                                <string>Attractions</string>
                            </dict>
                        </dict>
                    </array>
                </dict>
            </dict>
            <dict>
                <key>result</key>
                <dict>
                    <key>description_short</key>
                    <string>Experience some of the most famous landmarks in English history, University City of Oxford, rolling countryside and honey stoned cottages of the Cotswolds and Stratford upon Avon home of the famous English plyright, William Shakespeare.</string>
                    <key>flex_reference</key>
                    <string>FLX-LON-2AD-267-38AB</string>
                    <key>geocoded_latitude</key>
                    <string>51.5081289</string>
                    <key>geocoded_longitude</key>
                    <string>-0.128005</string>
                    <key>name</key>
                    <string>Oxford, Stratford and the Cotswolds Villages</string>
                    <key>primary_image</key>
                    <string>http://media.*****.com/FLX-LON-2AD-267-38AB-image_original-AF.jpg</string>
                    <key>product_categories</key>
                    <array>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>type</string>
                                <key>name</key>
                                <string>Sightseeing Tours</string>
                            </dict>
                        </dict>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>category</string>
                                <key>name</key>
                                <string>Excursion</string>
                            </dict>
                        </dict>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>type</string>
                                <key>name</key>
                                <string>Attractions</string>
                            </dict>
                        </dict>
                    </array>
                </dict>
            </dict>
            <dict>
                <key>result</key>
                <dict>
                    <key>description_short</key>
                    <string>The must see attractions of the United Kingdom, World Heritage sites, Stonehenge and the Roman Baths.</string>
                    <key>flex_reference</key>
                    <string>FLX-LON-65D-AC0-B08E</string>
                    <key>geocoded_latitude</key>
                    <string>51.5081289</string>
                    <key>geocoded_longitude</key>
                    <string>-0.128005</string>
                    <key>name</key>
                    <string>Stonehenge and Bath</string>
                    <key>primary_image</key>
                    <string>http://media.****.com/FLX-LON-65D-AC0-B08E-image_original-2E.jpg</string>
                    <key>product_categories</key>
                    <array>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>type</string>
                                <key>name</key>
                                <string>Sightseeing Tours</string>
                            </dict>
                        </dict>
                        <dict>
                            <key>product_category</key>
                            <dict>
                                <key>kind</key>
                                <string>category</string>
                                <key>name</key>
                                <string>Excursion</string>
                            </dict>
                        </dict>
                    </array>
                </dict>
            </dict>
        </array>
        <key>total_pages</key>
        <integer>18</integer>
        <key>total_results</key>
        <integer>54</integer>
    </dict>
</dict>
</plist>
4

2 に答える 2

1
NSDictionary *jsonResponse = /* get your dictionary from wherever */
NSDictionary *searchResults = [jsonResponse objectForKey:@"search_result"];
NSArray *allResults = [searchResults objectForKey:@"results"];

for (NSDictionary *result in allResults)
{
    NSDictionary *resultDetails = [result objectForKey:@"result"];

    NSString *name = [resultDetails objectForKey:@"name"];
    NSURL *imageURL = [NSURL URLWithString:[resultDetails objectForKey:@"primary_image"]];

    NSLog(@"Name: %@\n URL: %@", name, imageURL);
}
于 2012-12-17T02:39:31.870 に答える
1

辞書を取得します。

NSDictionary* dict= jsonDict[@"search_results"];

キー「results」の値は配列です。

NSArray* results = dict[@"results"];

最初のインデックスには辞書があります。

NSDictionary* dict2= results[0];

キー「結果」には、別の辞書があります。

NSDictionary* dict3= dict2[@"result"];

この辞書から、必要な値を取得できます。

NSString* name= dict3[@"name"];
NSString* primaryImage= dict3[@"primary_image"];

ディクトと配列がいくつあっても、1つを読み取ってから、すべてを読み取ることができます。これを簡単に行うには、パケット内のパケットのように考えて、オブジェクトを含むグラフを描画します。

編集

私はdictが何であるかを指定しなかった、それを追加しました。

于 2012-12-17T02:31:58.127 に答える