2011-09-18 79 views
0

框架。 您好我正在使用json框架。JSON排序字符串

如何使用JSONRepresentation方法獲取排序的字符串? 這裏是我的代碼:

NSMutableDictionary *tUserIDParam = [NSMutableDictionary dictionary]; 

[tUserIDParam setObject:@"UserID" forKey:@"@key"]; 
[tUserIDParam setObject:@"string" forKey:@"@type"]; 
[tUserIDParam setObject:@"mark" forKey:@"#text"]; 

NSMutableDictionary *tPasswordParam = [NSMutableDictionary dictionary]; 
[tPasswordParam setObject:@"Password" forKey:@"@key"]; 
[tPasswordParam setObject:@"string" forKey:@"@type"]; 
[tPasswordParam setObject:@"123456" forKey:@"#text"]; 

NSArray *tParams = [NSArray arrayWithObjects:tUserIDParam,tPasswordParam, nil]; 
NSDictionary *tParam = [NSDictionary dictionaryWithObject:tParams forKey:@"param"]; 

NSMutableDictionary *tRequests = [NSMutableDictionary dictionary]; 
[tRequests setObject:[NSNull null] forKey:@"key"]; 
[tRequests setObject:[NSNull null] forKey:@"basic"]; 
[tRequests setObject:tParam forKey:@"conditions"]; 

NSDictionary *tRequest = [NSDictionary dictionaryWithObject:tRequests forKey:@"request"]; 

NSString *tJSONStrFromDict = [tRequest JSONRepresentation]; 

我想JSON字符串,如:

{ 「請求」:{ 「鑰匙」:空, 「基本」:空, 「條件」:{ 「參數」:[{ 「@鍵」: 「用戶名」, 「@類型」: 「串」, 「#文」: 「標誌」},{ 「@鍵」: 「密碼」, 「@類型」:」字符串」, 「#文」: 「123456」}]}}}

但我從上面的代碼字符串:

{ 「請求」: {「basic」:null,「conditions」: {「param」:[{「#text」:「mark」,「@ key」:「UserID」,「@ type」:「string」},{「文 「:」 123456" , 「@鍵」: 「密碼」, 「@類型」: 「串」}]}, 「重點」:空}}

我嘗試使用SBJSONWritersortKeys屬性,它不工作...

有什麼辦法解決我的問題?

謝謝!

回答

1

NSMutableDictionary實例不保留元素的順序,既不按字母順序排列,也不按順序插入元素。這與JSON無關。

此外,對象的JSON數據模型也不保證順序。如果你想要一個特定的訂單,你必須使用JSON數組作爲訂購的零件。

順便說一句:SBJSONWriter sortKeys的效果是輸出按鍵名稱按字母順序排序的對象元素(或屬性)。這就是你得到的。

+0

嗨科多〜謝謝你的回覆。 所以,如果我想要一定的順序,我應該改變我的JSON格式。 使用'NSMutableArray',並添加每個對象包含一個'NSDictionary'(一對鍵/值)。 只有我能做到的方式? – wei

+0

如果順序是相關的 - 並且我不知道總體上下文來理解爲什麼這樣 - 那麼是的,一系列字典是實現這一目標的最簡單方法。 – Codo