猿问

Swift 4 - 错误代码 = 3840“垃圾在最后。” 解析 JSON 时

让我先说这个问题,我对 JSON 没有经验,所以如果我说错了什么,请纠正我。我已经搜索了几个小时,但找不到我的问题的解决方案。所以,我运行了一些 php,它应该返回包含 3 行数据的 JSON(高分表中的前三个用户)。


在 php 文件中,我这样回显每一行:


while ($row = $result->fetch_assoc()) {

    echo (json_encode($row));

}

但是,当我尝试解析输出时:


func parseJSON(_ data:Data) {

    var jsonResult = NSArray()

    do {

        jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as! NSArray

    } catch let error as NSError {

        print(error)

    }

}

控制台抛出错误:


错误域=NSCocoaErrorDomain 代码=3840 “垃圾在末尾。” UserInfo={NSDebugDescription=末尾的垃圾。}


这是服务器的实际输出:


{"userid":"8","name":"Sam","highscore":"215","rank":"1"}

{"userid":"9","name":"James","highscore":"210","rank":"2"}

{"userid":"10","name":"Julian","highscore":"162","rank":"3"}

根据jsonlint.com这不是有效的,但我不知道我能做些什么来解决这个问题。为什么 json_encode() 不在}括号后放置逗号,最重要的是如何修复无效的 JSON?谢谢你。


神不在的星期二
浏览 152回答 1
1回答

沧海一幻觉

您回显了多个 JSON 字符串,您需要将查询结果合并为 1 个数组,然后将其转换为单个 JSON 字符串:$array = []while ($row = $result->fetch_assoc()) {    $array[] = $row;}echo json_encode($array);您的 JSON 将如下所示:[    {"userid":"8","name":"Sam","highscore":"215","rank":"1"},    {"userid":"9","name":"James","highscore":"210","rank":"2"},    {"userid":"10","name":"Julian","highscore":"162","rank":"3"}]
随时随地看视频慕课网APP
我要回答