4

我正在从 Web 服务接收一些 json。我使用 TouchJSON 库解析它。我保留数据以供用户更改某些值,然后我想将其返回给 Web 服务。

我得到的 JSON 对象在对象中包含 NSDictionary 对象,如下所示:

[
    {
        "id": null,
        "created_at": 12332343,
        "object": {
            "name": "Some name",
            "age" : 30 
        },
        "scope": "it stuff",
        "kind_id": 1,
        "valid": true,
        "refering_statement": {
            "id": 95 
        },
        "user": {
            "id": 1 
        } 
    }
]

如果我想更改此字典中的值,我不能,因为从 TouchJSON 返回的对象是不可变的。

有没有办法让 TouchJSON 返回可变对象?

或者有没有办法让Objective C 使一个NSDictionary 和它的所有孩子都可变?

还是我必须遍历 NSDictionary 中的每个 NSDictionary 并将所有数据复制到可变副本中,然后重新插入所有内容?

希望有人可以帮助我解决这个问题:) 在此先感谢。

4

2 回答 2

2

TouchJson 可以选择返回可变对象而不是正常对象。(我通过查看源代码找到了它。)默认是返回它的“副本”,而不是“可变副本”。

NSError *error = nil;    
jsonString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
CJSONDeserializer *jsondeserializer = [CJSONDeserializer deserializer];
jsondeserializer.scanner.options = kJSONScannerOptions_MutableContainers;
NSMutableDictionary *jsonitems = [[NSMutableDictionary alloc] initWithDictionary:[jsondeserializer deserializeAsDictionary:jsonData error:&error]];
于 2011-09-08T14:34:26.100 回答
0

您可以从这样的字典创建可变字典。

(假设你的 json 解析字典被命名为 jsonDictionary)

NSMutableDictionary *userDictionary = [NSMutableDictionary dictionaryWithDictionary:jsonDictionary];

希望能为您解决。

于 2011-03-09T17:17:22.543 回答