2017-04-03 43 views
-3

我有在夫特3.循环一个小问题,我有一个JSONArray和一个JSONObject的象下面这样:如何检查JSONArray中的特定值?

dataReqList [任意]:

[{ 
bezeich = "MORE SALT"; 
grpnr = 0; 
nr = 1; 
}, { 
bezeich = "MORE SWEET"; 
grpnr = 0; 
nr = 2; 
}, { 
bezeich = "MORE PEPPER"; 
grpnr = 0; 
nr = 3; 
}, { 
bezeich = "MORE CHILLI"; 
grpnr = 0; 
nr = 4; 
}, { 
bezeich = COLD; 
grpnr = 0; 
nr = 5; 
}, { 
bezeich = HOT; 
grpnr = 0; 
nr = 6; 
}, { 
bezeich = SMALL; 
grpnr = 0; 
nr = 7; 
}, { 
bezeich = LARGE; 
grpnr = 0; 
nr = 8; 
}, { 
bezeich = "MEDIUM COOKED"; 
grpnr = 0; 
nr = 9; 
}, { 
bezeich = "WELL DONE"; 
grpnr = 0; 
nr = 10; 
}] 

currArticle [Anyhashable:任何]:

Optional([AnyHashable("bezeich"): Fresh and Green Salad, 
     AnyHashable("special-request"): ["MORE PEPPER", "COLD", "HOT"]]) 

我想知道,如果在JSONObject中JSONArray具有相同的Stringspecial-request,如何在数组中打印密钥bezeich。我试过这个,但它不工作:

for i in 0..<dataReqList.count { 
     if (((dataReqList[i] as? [AnyHashable: Any])? ["bezeich"] as! String) == (("\(currArticle?["special-request"]!)") as String)) { 
      print (dataReqList[i]) 
     } 

任何答案和建议将帮助我。在此先感谢

编辑: 我是新的斯威夫特。我以前已经阅读THIS,但它仍然不起作用。

+0

请在发布问题之前进行基本搜索。 – shallowThought

+0

@shallowThought对不起先生专家,看我的编辑:) –

回答

1

currArticle字典有字符串Array作为值,所以你不能直接比较它与字符串,你可以使用这样的过滤器。

var filterArray = [[String:Any]]() 
if let dataArray = dataReqList as? [[String:Any]], 
    let specialRequestArray = currArticle["special-request"] as? [String] { 

    filterArray = dataArray.filter { specialRequestArray.contains($0["bezeich"] as? String ?? "") } 
    print(filterArray) 
} 
+0

它不能正常工作。打印行永远不会执行。但我明白你的代码块的含义。我会尝试修改。谢谢 –

+0

@MarioMargoPradipta如果你所表现的问题是正确的,那么这应该是完美的 –

+0

真的很抱歉,我是新的迅速。在Android Studio中,JSON输出看起来像正常的在Xcode不喜欢(可选,其他符号或等) –

相关问题