我还是iOS开发的初学者。我正在为我的项目使用Swift 3,Alamofire 4和SwiftyJson
。我尝试从JSON获取数据。 JSON以单个数组返回。这是回报:
JSON:
[{
"id": "1",
"post_title": "Event_1",
"post_content": "Taylor Swift",
"start_date": "2016-11-23",
"end_date": "2016-11-23",
"post_date": "2016-11-18"
}, {
"id": "2",
"post_title": "Event_2",
"post_content": "Nickelback",
"start_date": "2016-11-15",
"end_date": "2016-11-16",
"post_date": "2016-11-15"
}, {
"id": "3",
"post_title": "Event_3",
"post_content": "Nirvana",
"start_date": "10.00pm on 22-02-2012",
"end_date": "6.00am on 23-02-2012",
"post_date": "2016-07-10"
}]
斯威夫特:
var newsArray : [[String:Any]] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return newsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell
let currentNews = newsArray[indexPath.row]
if let post_content = currentNews["post_content"] {
cell.lbl_content.text = post_content as? String
}
return cell
}
func getJSON(){
Alamofire.request(BASE_URL).responseJSON {
response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
if let tempArray = json as? [[String: Any]] {
self.newsArray = tempArray
self.tableView.reloadData()
}
case .failure(let error):
print(error)
}
}
}
问题:
看起来tempArray没有任何价值。
我尝试在tableViewCell中实现该值。
感谢任何帮助,非常感谢。
答案 0 :(得分:1)
您可以尝试使用此代码。
Alamofire.request(BASE_URL).responseJSON {
response in
switch response.result {
case .success(let value):
//to get JSON return value
if let result = response.result.value {
let JSON = result as! [[String: Any]]
//then use guard to get the value your want
}
case .failure(let error):
print(error)
}
}
答案 1 :(得分:0)
试试这个
json
仅使用json[]
config/environments/staging.rb
答案 2 :(得分:0)
请尝试下面
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotlyOutput("plot1", height = "400px", width = "600px"))
)
)
)
server <- function(input, output) {
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
output$plot1 <- renderPlotly({
plot_ly(d, x = ~carat, y = ~price, color = ~carat,
size = ~carat, text = ~paste("Clarity: ", clarity))
})
}
shinyApp(ui = ui, server = server)
答案 3 :(得分:0)
尝试将json[] as? [[String: Any]]
更改为json.array
答案 4 :(得分:0)
var newsArray : [[String:Any]] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return newsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell
let currentNews = newsArray[indexPath.row]
if let post_content = currentNews["post_content"] {
cell.lbl_content.text = post_content as? String
}
return cell
}
func getJSON(){
Alamofire.request(BASE_URL).responseJSON {
response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
if let tempArray = json as? NSArray {
self.newsArray = tempArray
print(tempArray)
self.tableView.reloadData()
}
case .failure(let error):
print(error)
}
}
}
尝试以上代码行。可以帮到你。
答案 5 :(得分:0)
目前我没有使用Swift 3,Alamofire 4.我在下面的链接中找到了一些解决方案。请检查,如果你能解决这个问题。 链接:http://ashishkakkad.com/2015/10/how-to-use-alamofire-and-swiftyjson-with-swift/
Alamofire.request("http://api.androidhive.info/contacts/").responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)
if let resData = swiftyJsonVar["contacts"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
}
if self.arrRes.count > 0 {
self.tblJSON.reloadData()
}
}
}