gpt4 book ai didi

json - SBJsonWriter 嵌套 NSDictionary

转载 作者:行者123 更新时间:2023-12-01 04:55:28 25 4
gpt4 key购买 nike

我正在尝试使用 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 会在上传时被正确解析)。

在此先感谢您的帮助。

最佳答案

这是一个演示如何使用 SBJsonWriter 的简单代码:

#import <Foundation/Foundation.h>

#import "SBJsonWriter.h"


int main(int argc, const char * argv[])
{

@autoreleasepool {

NSDictionary* aNestedObject = [NSDictionary dictionaryWithObjectsAndKeys:
@"nestedStringValue", @"aStringInNestedObject",
[NSNumber numberWithInt:1], @"aNumberInNestedObject",
nil];

NSArray * aJSonArray = [[NSArray alloc] initWithObjects: @"arrayItem1", @"arrayItem2", @"arrayItem3", nil];

NSDictionary * jsonTestDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"stringValue", @"aString",
[NSNumber numberWithInt:1], @"aNumber",
[NSNumber numberWithFloat:1.2345f], @"aFloat",
[[NSDate date] description], @"aDate",
aNestedObject, @"nestedObject",
aJSonArray, @"aJSonArray",
nil];

// create JSON output from dictionary

NSError *error = nil;
NSString * jsonTest = [[[SBJsonWriter alloc] init] stringWithObject:jsonTestDictionary error:&error];

if ( ! jsonTest ) {
NSLog(@"Error: %@", error);
}else{
NSLog(@"%@", jsonTest);
}
}
return 0;
}

输出

{
"aDate":"2012-09-12 07:39:00 +0000",
"aFloat":1.2345000505447388,
"nestedObject":{
"aStringInNestedObject":"nestedStringValue",
"aNumberInNestedObject":1
},
"aJSonList":["arrayItem1","arrayItem2","arrayItem3"],
"aString":"stringValue",
"aNumber":1
}

注意事项:

  1. 使用“error”让我明白如果你写 [NSDatedate] 而不是 [[NSDate date] description] 你会得到一个“JSON不支持序列化__NSTaggedDate"错误。
  2. 注意 float 舍入错误... 1.2345 变成了 1.2345000505447388

关于json - SBJsonWriter 嵌套 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765037/

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