我正在尝试向 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 请求(顺便说一句;))
问题是这会创建一个 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 不会仅仅根据数组长度正确推断,这似乎有点挑剔。但我想你可以用任何一种方式争论。请参阅下面的选定答案。这就是我一直在寻找的。感谢所有回复的人!