我正在尝试使用Json序列化objc对象,以将其发送到服务器。
该服务器针对该对象类型在GET上发送以下内容:
{
"TypeProperties":[
{"Key":"prop 0","Value":"blah 0"},
{"Key":"prop 1","Value":"blah 1"},
{"Key":"prop 2","Value":"blah 2"},
{"Key":"prop 3","Value":"blah 3"}
],
"ImageURls":[
{"Key":"url 0","Value":"blah 0"},
{"Key":"url 1","Value":"blah 1"},
{"Key":"url 2","Value":"blah 2"},
{"Key":"url 3","Value":"blah 3"}
]
}
SBJsonWriter为我在objc中创建的匹配对象/类型生成以下内容:
{
"TypeProperties": {
"key 2": "object 2",
"key 1": "object 1",
"key 4": "object 4",
"key 0": "object 0",
"key 3": "object 3"
},
"ImageUrls": {
"key 0": "url 0",
"key 1": "url 1",
"key 2": "url 2"
}
}
这就是我使用SBJsonWriter的方式:
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
writer.humanReadable = YES;
NSString* json = [writer stringWithObject:itemToAdd];
这是我正在序列化的类中的proxyForJson的实现(SBJsonWriter要求):
- (NSDictionary*) proxyForJson
{
return [NSMutableDictionary dictionaryWithObjectsAndKeys:
self.typeProperties, @"TypeProperties",
self.imageUrls, @"ImageUrls",
nil];
}
要序列化的类仅包含两个属性:typeProperties和imageUrls(均为NSMutableDictionary)。
现在的问题是:执行POST时,服务器(不奇怪)不会解析SBJsonWriter产生的Json。问题是:如何生成与服务器提供的Json相匹配的Json(假设匹配的Json在上载时会被正确解析)。
在此先感谢您的帮助。
最佳答案
在JSON中,{ }
代表一个对象(键/值对),而[ ]
代表一个数组。从您提供的示例来看,这是服务器的期望值:
顶部对象:具有两个键的字典:TypeProperties
和ImageUrls
。
TypeProperties和ImageUrls:每个数组都是一个包含一个或多个对象的数组,这些对象带有两个键:Key
和Value
。每个键应具有其各自的值。
为了符合服务器的期望,您需要一个与此类似的结构(请注意,这只是一个简单的示例,直接在此处编写,但应指出正确的方向):
NSDictionary *object = [NSDictionary dictionaryWithObjectsAndKeys:
@"prop 0", @"Key",
@"blah 0", @"Value",
nil];
NSArray *typeProperties = [NSArray arrayWithObjects:
object, // Add as many similar objects as you want
nil];
NSArray *imageUrls = [NSArray arrayWithObjects:
object, // Add as many similar objects as you want
nil];
然后,在
proxyForJson
方法中,可以使用:- (NSDictionary*) proxyForJson
{
return [NSDictionary dictionaryWithObjectsAndKeys:
typeProperties, @"TypeProperties",
imageUrls, @"ImageUrls",
nil];
}
关于json - SBJsonWriter嵌套NSDictionary,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11765037/