如何在iOS(目标c)中发送带有字典和数组的JSON?

Posted

技术标签:

【中文标题】如何在iOS(目标c)中发送带有字典和数组的JSON?【英文标题】:How to send JSON with dictionary and array in iOS(Objective c )? 【发布时间】:2018-01-17 07:57:37 【问题描述】:

我正在尝试将 JSON 发送到 websocket。所需的格式是逗号,而当我将项目添加到字典时,它会创建一个分号。

要求格式:

"key":"driver_location_updates","driverID":40,"coordinates":[25.22632,55.2844576]

我创建的格式:

"driver_location_updates" =    
   
       coordinates = ( "24.96046731716484","67.05977029173361"); 
       driverID = 16;
       key = "driver_location_updates"; 
   ;

【问题讨论】:

LOLX 都一样 farq tou hai ... :( 不要使用日志,如果您担心那个分号,两者都是一样的。 1.key 不带引号。 2.每个值的末尾都有分号 3.坐标中的圆括号 @warzone_fz 检查我的回答,如果仍有疑问,请询问。 【参考方案1】:

正如你在 cmets 中所说的

    键不带引号。

    每个值的末尾都有分号

    坐标中的圆括号

说明:

    因为您的密钥是单字的,所以可以假设它是字符串(因为有字符而不是整数)。尝试将密钥保留为两个词,例如 key minekey_2

输出 =>

    因为字典中的每个键后面都有分号。 (字典的 x 代码语法)。

    因为控制台中的数组以 (...) 表示,而字典将以 ... 表示。

现在,如果您观察到 Dictionary 中有 = 但在 json 中有 :,则更多。只是因为数组字典表示法与json不同。

通过考虑以上几点,您可以清楚地知道两者是相同的。

【讨论】:

【参考方案2】:

我猜你应该使用JSONSerialization 将字典转换为json。

let dictionary: [String: Any] = ["key":"driver_location_updates", "driverID": 40, "coordinates": [25.22632,55.2844576]]

let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: [])
let jsonString = String(data: jsonData!, encoding: .utf8)
print(jsonString)

希望你知道如何将答案转换为Objective C

【讨论】:

【参考方案3】:

从格式我猜你已经使用了[NSString stringWithFormat:@"%@"] 或者从对-[NSDictionary description] 的调用中获得了“JSON”。

这不会创建 JSON,而是创建通用的、人类可读的数据结构表示法。它有点像 JSON,很多年前我也遇到过同样的问题 :)

使用NSJSONSerialization 获取真正的JSON:

NSData *JSONData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 &error];

或直接写入流

[NSJSONSerialization writeJSONObject:dictionary toStream:writeStream options:0 error:&error]

【讨论】:

以上是关于如何在iOS(目标c)中发送带有字典和数组的JSON?的主要内容,如果未能解决你的问题,请参考以下文章

如何解析 json 值的动态变化。带有 2 个嵌套 dic 的字典,然后是数组,然后是 dic

Alamofire:发送带有字典数组的 JSON

iOS(目标c)将带有json的post请求发送到php后端

目标C将带有扩展名和名称的文件保存到字典

AFNetworking 2.0 发送带有字典参数数组的发布请求

在目标c中订购一个数组/字典[重复]