2012-07-07 35 views
2

我一直有一段時間的惡魔試圖讓我的JSON在IOS5中解析爲INDERDER。它來自服務器,所以我知道不是這樣。這裏是我的代碼:在IOS中依次解析JSON

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,一切都看起來很美。第二個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; 
    }; 
} 

二的NSLog:

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

您可以發佈您的JSON的樣品和生成的日誌? – 2012-07-07 17:48:54

+0

@JesseRusak示例發佈 – 2012-07-07 17:55:57

回答

0

字典的詞條是無序的。在迭代字典時,可以按任意順序獲取密鑰。

+0

但是根據我的代碼判斷,我的推理是NSDictionary值只能得到NSArray鍵的一個對象,所以理論上的順序應該是NSArray userData的順序。 – 2012-07-07 19:06:44

2

問題是您的頂層對象不是NSArray,而是NSDictionary。如果你發回一個數組,這將正常工作。另一種方法是獲取頂級字典的鍵並在迭代之前對它們進行排序。

0

除非您編寫自己的JSON解析器,否則無法執行此操作。如果要符合JSON規範,任何自尊的JSON庫都不能保證您的訂單。

從JSON對象的定義:

鍵的無序集合:值對。

+0

那麼我的第一個數組是如何呢? – 2012-07-07 19:07:15

+0

你可能會得到你的元素或不按順序,我的觀點是,沒有任何特定順序的保證。有時候你可能會很幸運並且能夠順利完成任務,但作爲一名工程師,你不應該指望這一點。如果您自己解析響應,則可以按原始順序返回項目。 – Macondo2Seattle 2012-07-07 20:04:05

0

這可能與您無關,但我總是在服務器上進行排序併發回一個有序的JSON字符串。

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