gpt4 book ai didi

ios - 序列化 JSON 而不用 [ ] 括起来

转载 作者:行者123 更新时间:2023-11-29 03:50:53 27 4
gpt4 key购买 nike

我正在尝试向 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com