从Meteor JSON / Array / Cursor制作字典数组

时间:2015-11-03 15:50:40

标签: swift

我从阵列中的Meteor服务器收到几个(0-10)对象。它们可能在控制台中看起来像这样:

let allConferences = conferences.allDocuments
print(allConferences)

控制台输出:

[<METDocument key: <collection: conferences, ID: Hr3bw6pySG8G3TKzh>, fields: {
    createdAt = "2015-11-03 13:43:05 +0000";
    type = doctor;
    user = KTsCySacEAiz3eDnf;
    userdata =     {
        birthdate = "Male";
        gender = "<null>";
    };
}>, <METDocument key: <collection: conferences, ID: RmfQm96Kcj5JTfDQM>, fields: {
    createdAt = "2015-11-03 13:40:12 +0000";
    type = doctor;
    user = KTsCySacEAiz3eDnf;
    userdata =     {
        birthdate = "<null>";
        gender = "<null>";
    };
}>]

我需要以我可以在Swift 2.1中轻松使用的格式获取此数据。例如,我需要根据createdAt字段对对象进行排序,然后使用tableView中标签中的一些其他字段。

我按照this answer

尝试了NSJSONSerialization
do {
    if let jsonResult = try NSJSONSerialization.JSONObjectWithData(allConferences, options: []) as? NSDictionary {
    print(jsonResult)
    }
} catch {
    print(error)
    }

但是这给了我错误无法将'[AnyObject]'类型的值转换为预期的参数类型'NSData'

我可以使用此方法直接访问字段区域:

let oneConferencesField: NSDictionary = conferences.allDocuments[0].valueForKey("fields") as! NSDictionary

如果有人知道如何使用NSJSONSerialization的经典方法解析这些数据会很棒 - 谢谢。

1 个答案:

答案 0 :(得分:1)

import numpy import matplotlib.pyplot as plt from matplotlib.collections import LineCollection a = numpy.array([[ 3.57, 1.76, 7.42, 6.52], [ 1.57, 1.2 , 3.02, 6.88], [ 2.23, 4.86, 5.12, 2.81], [ 4.48, 1.38, 2.14, 0.86], [ 6.68, 1.72, 8.56, 3.23]]) xs = a[:,::2] ys = a[:, 1::2] lines = LineCollection([list(zip(x,y)) for x,y in zip(xs, ys)], label='data_a') f, ax = plt.subplots(1, 1) ax.add_collection(lines) ax.legend() ax.set_xlim([xs.min(), xs.max()]) # have to set manually ax.set_ylim([ys.min(), ys.max()]) plt.show() 仅适用于 JSON数据(例如来自服务器)。您的NSJSONSerialization.JSONObjectWithData对象是allConferences个对象的数组,而不是数据,所以它是正常的,它不起作用。

阅读文档,看起来您可以使用其fields属性从METDocument获取字典。

因此,要从对象中提取字典,您可以这样做:

METDocument