快速从字典数组中获取无效的 JSON 数组

Posted

技术标签:

【中文标题】快速从字典数组中获取无效的 JSON 数组【英文标题】:Getting invalid JSON array from array of dictionaries in swift 【发布时间】:2015-04-16 12:09:36 【问题描述】:

我想从我拥有的数组中创建 JSON 数组字符串。但我收到无效的 JSON。 这就是我想要的:

[
    
        "validationCode": null,
        "FirstName": "Samer",
        "LastName": "Shame",
        "MobileNumber": "0991992993",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0991992994",
        "Name": "Abo Alshamat",
        "ID": 1
    ,
    
        "validationCode": null,
        "FirstName": "Ahmad",
        "LastName": "Ali",
        "MobileNumber": "0992993994",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0992993995",
        "Name": "AL-Kamal",
        "ID": 2
    
]

这就是我得到的:

[
    [
        "validationCode": null,
        "FirstName": "Samer",
        "LastName": "Shame",
        "MobileNumber": "0991992993",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0991992994",
        "Name": "Abo Alshamat",
        "ID": 1
    ],
    [
        "validationCode": null,
        "FirstName": "Ahmad",
        "LastName": "Ali",
        "MobileNumber": "0992993994",
        "SimNumber": null,
        "Email": null,
        "PhoneNumber": "0992993995",
        "Name": "AL-Kamal",
        "ID": 2
    ]
]

这是代码:

var data = [NSDictionary]()
for item in someList 
    var d = ["validationCode": null,
            "FirstName": item.prop1,
            "LastName": item.prop2,
            "MobileNumber": item.prop3...]

    data.append(d)

var bytes = NSJSONSerialization.dataWithJSONObject(data, options: NSJSONWritingOptions.allZeros, error: nil)
var jsonObj = NSJSONSerialization.JSONObjectWithData(bytes!, options: nil, error: nil) as! [Dictionary<String, String>]

我应该怎么做才能得到标准的 JSON 格式?

【问题讨论】:

你是如何使用 var d 的?写更多关于 var data 和 var d 的内容 我更新了代码。我遍历列表并创建字典d 并将它们添加到字典列表data。然后我将所有内容都转换为 JSON,但我得到的是 [[],[],[]] 而不是 [,,] 尝试将 [NSDictionary]() 更改为 [[String:AnyObject]]() 试过了。它不起作用 你怎么看你得到了什么?你打印 jsonObj 吗? 【参考方案1】:

您正在将 Swift CollectionType 转换为 JSON (bytes),然后将其转换回 (jsonObj)。

在这种情况下,bytesJSONNSDatajsonObj 是 Swift CollectionType

所以当您print(jsonObj) 时,您不是在打印JSON,而是在打印集合。

获取真实的JSON

print(NSString(data: bytes, encoding: NSUTF8StringEncoding))

在这里您将看到正确的JSON 格式。

在 Swift 中,JSON 是一个字符串。不是对象。


你的代码应该是这样的:

let json = NSJSONSerialization.dataWithJSONObject(data, options: nil, error: nil)!

let jsonString = NSString(data: json, encoding: NSUTF8StringEncoding)!

println(jsonString)

【讨论】:

只有一个子问题。当将此发送到网络服务时,我应该发送jsonString 就像你在这里写的那样。我说的对吗? 是的,你可以像普通字符串一样发送它。 好的。非常比你。

以上是关于快速从字典数组中获取无效的 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 almaofire 快速获取字典的所有值并传递给视图控制器

SwiftyJson 从字典中的数组中获取值

解析json字典,数组中的数组?在更深的巢穴中获取钥匙对象?

iOS:如何从一个字典内的数组内的对象中获取值?

我如何从这个数组中快速获取菜单

从 json 数组快速加载到对象数组中