Swift 将 JSON 转换为字典数组问题 错误代码 3840(末尾有垃圾)

Posted

技术标签:

【中文标题】Swift 将 JSON 转换为字典数组问题 错误代码 3840(末尾有垃圾)【英文标题】:Swift converting JSON to dictionary array issues Error Code 3840 (Garbage at end) 【发布时间】:2020-07-21 06:52:31 【问题描述】:

在整个 html 请求中,我从我的数据库中下载了一个 JSON 文件。这是我返回的 JSON 文件。

"_id":"$oid":"5e8e09d0bf75d176ecfa2101","name":"Pasta al pomodoro","category":"Primi","ingredients":"","price":"15.99","available":true"_id":"$oid":"5e8e0c2da73abb76ec812daf","name":"Cotoletta","category":"Carne","ingredients":"Cotoletta, Limone","price":"25.99","available":true

我尝试将 JSON 文件转换为字典数组,以便我可以通过以下方式选择项目:

myArray[0]['name']

这是我用来尝试转换 JSON 的代码:

do 
    let myArray = try (JSONSerialization.jsonObject(with: data, options : .mutableContainers) as? [Dictionary<String, Any>])!
    print(myArray)
    //completion(myArray, nil)

但它似乎不起作用;它返回错误消息:

错误域=NSCocoaErrorDomain 代码=3840“垃圾结束。” UserInfo=NSDebugDescription=垃圾结束。

【问题讨论】:

尝试从你的 jsonSerilization 中移除 options 参数] 已经试过了,没用。 您不能将字典转换为带有JSONSerialization 的数组,并且 JSON 似乎是字典。无论如何,.mutableContainers 在 Swift 中毫无意义。 那么你将如何解决这个问题? 您的 JSON 有问题,将您的响应输入到格式化程序会出现错误。 jsonformatter.curiousconcept.com 【参考方案1】:

问题出在 php 服务器上,因为它没有正确发出 JSON 文件。为了解决这个问题,我必须确保 PHP 文件在第一个 DB 行之前回显“[”,在每个 DB 行之间包含一个“,”并以“]”结束文件。

之前:

foreach ($rows as $document) 
        echo(json_encode($document));
    

之后:

echo "[";
foreach ($rows as $document) 
    echo(json_encode($document));
    echo (", ");

echo "]";

【讨论】:

以上是关于Swift 将 JSON 转换为字典数组问题 错误代码 3840(末尾有垃圾)的主要内容,如果未能解决你的问题,请参考以下文章

将 Swift 3 数组转换为 JSON

在 Swift/Xcode 中将 JSON 文件转换为数组

在 Swift 中将字典转换为 JSON

在 Swift 中将字典转换为 JSON

Swift JSON字符串和字典以及数组的互转

使用大引号时,将字符串 JSON 转换为 Swift 中的字典