2016-07-22 150 views
1

我正在使用swift。 当我在邮递员/浏览器和移动模拟器上测试时,我从Web服务器获得的响应不同。迭代JSON,swift

邮差/浏览器响应:

items: [ 
    { 
    itemId: 500, 
    name: "ABC" 
    }, 
    { 
    itemId: 500, 
    name: "ABC" 
    } 
    ] 

响应在iOS设备上:

items: (
    { 
    itemId: 500, 
    name: "ABC" 
    }, 
    { 
    itemId: 500, 
    name: "ABC" 
    } 
    ) 

我想知道如何通过数组迭代,但由于结果是不是iOS上的array我不确定我该如何去做。另外,我还检索了array中约25-30项的结果。我也有一些变量,它们是在数组之后的响应中提供的。

+3

你为什么说它不是一个数组?这是一系列字典。不要将Swift语法与JSON语法或与打印对象的方式混为一谈,这只是一种表示,而不是对象本身...... – Moritz

回答

2

当打印阵列将与()支架代替[]支架和字典打印将{}括号来打印有与ios您回应没有问题。

至于你说let items : [NSDictionary]!您的项目数组包含dictionary那么你可以遍历像这样

for item in items { 
    print(item["itemId"]) 
    print(item["name"]) 
} 
+0

'let items:[NSDictionary]! var items:[NSDictionary]! httpresponsefunc(){ self.items = response [“items”] as! [NSDictionary] }' 这是你说的吗? – sau123

+0

@ sau123这会打印出像'({},{} ...)' –

+0

是的,我明白了,它会像这样打印。 我想知道的是,我们应该如何迭代它? – sau123

0

正如其他人所说,你的iOS中的反应是好的。

你可以迭代它简单地用:

for item in items { 

// do what you want with each item 

} 

它正常工作,在一个游乐场:

let items = [["itemId": 500, "name" : "ABC"], [ "itemId": 500, "name": "ABC"]] as NSArray 


for item in items { 
    print(item as! NSDictionary) // prints each dictionary as expected 
} 
0

你有字典的数组。所以,你可以迭代 -

for itemDict in items { 
    let itemId = itemDict["itemId"] 
    println("Item ID: \(itemId)") 

    let name = itemDict["name"] 
    println("Item name: \(name)") 
} 
+0

考虑到'println'已被删除,这将不起作用。此外,这将打印“项目ID:可选(500)”。 – WMios