如何在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 mine
或 key_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
iOS(目标c)将带有json的post请求发送到php后端