2016-09-08 60 views
0

我是Java開發人員正在致力於一個iOS應用程序,它將請求發送到服務器上的Java Spring後端。Java對象到IOS NSDictionary,屬性訂單

當進行調用時,後端返回一個JSON到前端,在那裏它被反序列化爲一個NsDictionary,並且它工作正常。

但是,現在客戶已經要求前端的字段按他給我們的順序排序。

我試圖詮釋的對象,像這樣:

@JsonPropertyOrder({"firstName","lastName","mobile","email", "address","city","state","gender"}) 
public final class User{ ... } 

不過,雖然是在排序的字符串表示的屬性,當反序列化到NsDictionary,它而不按字母順序由字段排序。

這個排序可以完成嗎?我們該如何實現它?

此致敬禮,並提前致謝。

回答

0

NSDictionary不支持按鍵的特定順序,字母順序就是它如何呈現字符串表示,在內部它們沒有順序。

你可以試着改變你的數據模型包括sortIndex財產,像

{"firstName":{sortIndex:0,value:"John"}} 

或更容易,你可以把每個鍵值對作爲數組中的條目,比如

[{"firstName":"John"},{"lastName":"Doe"}] 
0

謝謝安德烈

我把你的第二個解決方案,這是我做了什麼,對我有用:

1)我已經按照客戶要求的方式訂購了課程中的字段。

2)我已經加入下面的方法來類:

@JsonProperty(access = Access.READ_ONLY) 
List<HashMap<String,String>> keyValues = new ArrayList<HashMap<String,String>>(); 
public List<HashMap<String, String>> getKeyValues() { 
    return keyValues; 
} 
public void initKeyValuePairs(){ 
    Field[] fields = this.getClass().getDeclaredFields(); 
    for(int i=0 ; i<19 ; i++){ 
     try { 
      HashMap<String,String> pom = null; 
      if(fields[i].get(this)!=null){ 
       pom = new HashMap<String,String>(); 
       pom.put(fields[i].getName(), fields[i].get(this).toString()); 
       keyValues.add(pom); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

因此,現在當我完全填充用戶模型,我只是調用此方法和JSON返回對象的陣列,正確排序。

(PS:有在我班上超過19場,但客戶要求的前19是因爲他曾表示,所以我只取前19,而忽略其餘的:))

謝謝您的幫助。