“JSON”类型的值没有成员“arrayOf”

时间:2018-05-07 22:05:19

标签: json swift swift4

我正在将代码从Swift 2迁移到Swift 4.以下代码在Swift 2中运行良好但在Swift 4中出错:

<?php 

  header("Content-type: application/json");

  $data_array = ['one','two','three'];
  $json = json_encode($data_array);
  echo $json;

?>

错误:

  

'JSON'类型的值没有成员'arrayOf'

有谁知道如何摆脱这个错误?

编辑:
我使用Freddy库进行JSON解析

2 个答案:

答案 0 :(得分:2)

  

'JSON'类型的值没有成员'arrayOf'

错误明确指出对象JSON没有任何arrayOf方法。

您后来声明此对象是Freddy JSON对象。 (你应该在开头就把它添加到你的问题中)

现在,在您的情况下,您正在将代码从Swift v2迁移到v4。这是一个巨大的飞跃所以在这样的情况下,当遇到障碍时,首先应该检查文档,特别是在你的情况下,看看是否有arrayOf方法或者它是否已经改变,以及现在有类似的选择。

无论如何,根据文档,Freddy有一个getArray(at:),我相信随着时间的推移,arrayOf(_:type:)取代了let unorderedComments = try? json.getArray(at:"comments")

以下内容应解决此问题:

json.getArray(at:"rootKey",1,"nestedKey")

注意:上述函数采用可变参数;即,如果你想要一种路径,它可能需要多个字符串 json["rootKey"][1]["nestedKey"]之类的内容与 <td data-title="'#'" sortable="'id'"> {{$index + 1}} </td>

类似

PS:由于您要从v2升级到v4,这不是唯一要处理的错误 只需按照相同的想法修复您的其他错误 如果您遇到困难,我们随时为您提供帮助 :)

答案 1 :(得分:0)

我假设您有一系列评论(包含字典)。

以下内容可以帮助您入门:

var results: [String: AnyObject]? = nil
do {
    results = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: AnyObject]
    // Now try to extract data:
    guard let results = results else {
        let userInfo = [NSLocalizedDescriptionKey: "Failed to get any results"]
        let error = NSError(domain: "<whatever error name>", code: 1, userInfo: userInfo)
        return error
    }
    // get comment
    guard let dictionary = results[Parse.JSONResponseKeys.<Responsekey>] as? [[String: AnyObject]] else {
        let userInfo = [NSLocalizedDescriptionKey: "Failed to get list"]
        let error = NSError(domain: "<whatever error name>", code: 1, userInfo: userInfo)
        return error
    }
    // process the array
    if dictionary.count > 0 {
        // get the 1st element
        comment = Comment.init(dictionary: dictionary.first!)
        // if you know you have more than one... you can put this in a loop
        return comment
    } else {
        return null
    }
} catch {
    //How ever you want to catch error
}