我正在使用一个分页API,并希望动态地读取每个页面的Json。我已经使用while循环实现了这一点,当我阅读了最后一页的Json时,我想打破它
var pageNumber = 1
val pageSize = 1000
while (pageNumber >= 1) {
println("Inside the while loop!" + pageNumber)
url = url.concat("OWNER_MI_KEY&dataset_version=v1.1&pageNumber=$pageNumber&pageSize=$pageSize")
val apiResponse = MakePostHttpRestCalls(url) // makes request to external rest endpoint
if (apiResponse != ""){
println("Got api response")
println("apiResponse :" + apiResponse)
val apiJson = parseApiResponse(apiResponse)//parses the json response
println("apiJson :" + apiJson)
if (apiJson.length == 0){
pageNumber = pageNumber + 1
}
}
}对于如何在代码中实现这一点,有什么想法吗?
发布于 2022-07-15 14:39:22
进一步我的评论,这里有一个粗略的想法,它看起来可能是一个递归函数,这是Scala设计用来做这种事情的函数方式。
def readResponsePages(pageSize: Int) = {
def loop(pageNumber: Int, responses: List[String]): List[String] = {
println("Inside the loop!" + pageNumber)
val thisUrl = url.concat(
s"OWNER_MI_KEY&dataset_version=v1.1&pageNumber=$pageNumber&pageSize=$pageSize"
)
MakePostHttpRestCalls(thisUrl) match {
case "" =>
responses.reverse
case apiResponse =>
println("Got api response")
println("apiResponse :" + apiResponse)
val apiJson = parseApiResponse(apiResponse) //parses the json response
println("apiJson :" + apiJson)
loop(pageNumber + 1, apiJson +: responses)
}
}
loop(1, Nil)
}
val responsePages = readResponsePages(1000)https://stackoverflow.com/questions/72993842
复制相似问题