我正在将代码从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解析
答案 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
}