【问题标题】:Swift 4 - Error Code=3840 "Garbage at end." when parsing JSONSwift 4 - 错误代码=3840“垃圾结束。”解析 JSON 时
【发布时间】:2019-11-29 23:31:13
【问题描述】:

让我先说我对 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?谢谢。

【问题讨论】:

    标签: php json swift


    【解决方案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"}
    ]
    

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2016-06-11
      • 2016-07-10
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多