- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试向 CouchDB 服务器发出 HTTP PUT 请求。我正在将 NSString 实例转换为 NSData。然后,我将此 NSData 实例转换为 NSArray 并尝试将其放入 CouchDB。所以像这样:
//convert string to NSData
NSData *docData = [@"{\"name\":\"nick\"}" dataUsingEncoding:NSUTF8StringEncoding];
//NSData to NSArray
NSArray *arrayJson = [NSArray arrayWithObjects:[NSJSONSerialization JSONObjectWithData:docData options:kNilOptions error:nil],nil];
然后我使用 AFNetworking 创建 HTTP PUT 请求(顺便说一句,这是 rad ;))
问题是这会创建一个如下所示的 json 字符串:
[{"name":"nick"}]
这是有效的 JSON,但 Couch 提示 400 Bad JSON。删除 [ ] 可解决该问题。我确信这些括号是将 NSData 转换为 NSArray 的结果,但我不确定如何使用 NSJSONSerialization 来完成此操作。谁能帮忙?
谢谢!
编辑
为了清楚起见,让我进一步解释我遇到的问题。我正在使用 PUT HTTP 请求使用 CouchDB HTTP API 创建文档。该文档可以手动编码 JSON,这就是我面临解析挑战的原因。 Couch 期望创建一个文档。因此它需要一个 JSON 对象。不是它们的数组。这似乎就是 [{"key":"value"}] 从 Couch 返回 400 HTTP 响应的原因。即使数组包含单个对象。似乎有点挑剔,API 不仅仅根据数组长度正确推断。但我想你可能会争论任何一种方式。请参阅下面所选的答案。这就是我要找的。感谢所有回复的人!
最佳答案
您可以让 NSJSONSerialization
进行从 Foundation 对象到字符串的转换。这保证了正确的转义并使代码更具可读性。
如果您有一个键值对(如上面的示例所示),您可以执行以下操作:
NSError* error = nil;
NSDictionary* jsonDict = @{@"name": @"nick"};
NSData* putData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&error];
您应该能够直接将其放入 PUT
请求的内容中,而无需将其包装在额外的数组中。如果处理请求的端点要求您发送数组,则应将该数组创建为 Foundation 对象 (NSArray
),并将其序列化为 JSON,然后再将其发送到服务器:
NSArray* jsonArray = @[@{@"name": @"nick"}];
您的问题的标题是“反序列化 JSON,而不用 [ ]”包装” - 不应该是“序列化 JSON 不包含在 [ ]" 中?
我改了,如果我误解了你的问题,请改回来。
关于ios - 序列化 JSON 而不用 [ ] 括起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078676/
我是一名优秀的程序员,十分优秀!