2

IOS5でJSONをIN ORDERで解析しようとして、私は非常に苦労しました。サーバーから順番に来ているので、そうではないことはわかっています。これが私のコードです:

NSArray *userData = [update JSONValue];
NSLog(@"USERDATA%@", userData);
NSEnumerator *enumerator = [userData objectEnumerator];
id key;
while (key = [enumerator nextObject]) {
    NSDictionary *value = key;
    NSString *comment = [value objectForKey:@"comment"];
    NSLog(@"USERCOMMENT %@", comment);
}

最初の NSLog、すべてが美しく見えます。2 番目の NSLog は、すべてを順不同にしています。私はほとんど頭がおかしくなっています。

最初の NSLOG:

USERDATA{
    1 =     {
        comment = "Test 6";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
    2 =     {
        comment = "Test 5";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
    3 =     {
        comment = "Test 4";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
    4 =     {
        comment = "Test 3";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
    5 =     {
        comment = "Test 2";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
    6 =     {
        comment = "Test 1";
        photoID = 1;
        postedDate = "2 days ago";
        userID = 17;
        userPic = "members/0/image01.png";
        username = kismet;
    };
}

2 番目の NSLog:

USERCOMMENT Test 4
USERCOMMENT Test 6
USERCOMMENT Test 1
USERCOMMENT Test 3
USERCOMMENT Test 5
USERCOMMENT Test 2
4

5 に答える 5

2

問題は、最上位オブジェクトが NSArray ではなく、NSDictionary であることです。配列を送り返すと、正しく機能します。別の方法は、最上位の辞書のキーを取得し、反復する前にそれらを並べ替えることです。

于 2012-07-07T18:00:04.253 に答える
0

まだ解決策に興味がある人のために:

NSDictionary *userData = [update JSONValue];
NSArray *keys = [[userData allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSMutableArray *array = [NSMutableArray arrayWithCapacity: [keys count]];

int i = 0;
for (NSString *key in keys) {
    [array addObject: [userData objectForKey: key]];
    i++;
}

for (NSDictionary *myDict in array) {
    NSString *comment = [myDict objectForKey:@"comment"];
    NSLog(@"USERCOMMENT %@", comment);
}

JSONをすべて順番に返します。

USERCOMMENT Test 6
USERCOMMENT Test 5
USERCOMMENT Test 4
USERCOMMENT Test 3
USERCOMMENT Test 2
USERCOMMENT Test 1
于 2012-07-07T21:26:19.750 に答える
0

ディクショナリのエントリは順不同です。ディクショナリを反復処理すると、任意の順序でキーを取得できます。

于 2012-07-07T17:58:43.863 に答える
0

これはあなたとは関係ないかもしれませんが、私は常にサーバーでソートを行い、順序付けされた JSON 文字列を返します。

于 2012-07-07T18:42:45.447 に答える
0

独自の JSON パーサーを作成しない限り、それはできません。JSON仕様に準拠したい場合、自尊心のあるJSONライブラリは順序を保証しません。

JSON オブジェクトの定義から:

キーと値のペアの順序付けられていないコレクション。

于 2012-07-07T18:00:38.487 に答える