2017-08-01 57 views
0
{ 
    "outterList": { 
    "section1": { 
     "entry1": { 
     "value": "" 
     }, 
     "entry2": { 
     "value": "" 
     }, 
     "entry3": { 
     "value": "" 
     }, 
     "innerSection": { 
     "entry1": { 
      "value": "" 
     }, 
     "entry2": { 
      "value": "" 
     } 
     } 
    }, 
    "section2": { 
     "entry1": { 
     "value": "" 
     } 
    } 
    } 
} 

問題陳述是讀取上述JSON,並將其存儲回與"value"字段更新爲每本地邏輯相同的格式。指向JSON(NSDictionary中)的內部節點

我最初去和解析上面的NSDictionary並將其轉換爲一個NSArray(可變),它將所有"entry"節點保存在自定義持有者類中。

是否有可能我的NSArray的持有者對象可以存儲一個直接指向"outterList" -> "section1" -> "innerSection" -> "entry2"的指針,以便每當我從我的邏輯中獲得一個新值並且必須更新它時,我可以立即執行該操作並且不會解析它再次到達該節點。

回答

0

在字典中的值會如果您修改對象本身進行更改:

myObj.value = newValue; 

,但如果你只是將指向另一個對象時,它不會改變:

myObj = [MyObj new]; 

所以它贏得不適用於JSON字符串或數字。

您也可以訪問字典中的值更快的使用valueForKeyPath像這樣:

[dict setValue:newValue forKeyPath:@"outterList.section1.entry1.value"] 
+0

@szhukav我們可以用'forKeyPath'如果字典一個數組。所以可能像'section1'有一個'entry'數組。所以我可以指向數組中的第二個元素爲'outterList.section1.2.entry.value' – AabidMulani

+0

不,你不能選擇使用valueForKeyPath的特定數組元素,據我所知。因此,如果沒有任何類型的檢查,它會看起來像這樣:'[[[dict valueForKeyPath:@「outterList.section1」] objectAtIndex:2] valueForKeyPath:@「entry.value」]'。但不建議這樣做,因爲API的任何更改都會導致應用程序崩潰。 – szhukov

+1

常用的方法是在您的自定義類中保留所有值,然後在需要發送JSON時將它們全部解析爲字典,這是通過某種映射器模式中的單個方法完成的。 – szhukov