2013-01-13 25 views
0

我是json的新手,并且对如何做到这一点感到困惑。我有这个基本的信息下面我需要转换将我的nsstring转换为json

"trailer": 
     "window":"broken" 
     "sidesteps":"dent" 
    "tractor": 
     "window":"craked" 
     "sidesteps":"missing" 
    "tire": 
     "tire1": 
      "pressure":"120" 
      "rim":"good" 
     "tire2": 
      "pressure":"120" 
      "rim":"good" 
+0

window = broken与rim的差别:好吗?它不清楚为什么有时你使用:和其他=显示的关系 – propstm

+0

我现在编辑的信息,拖车拖拉机和轮胎是有价值的内部对象。如何或将使用什么将其转换为json并传递给服务器 – baste

+0

@baste,你是如何创建上述字符串的?它是以编程方式创建的吗?这是转换前的字典吗? – iDev

回答

3

根据您从textFields中提取的所有值创建一本词典。它看起来像这样,

NSDictionary *dictionary = @{@"trailer":@{@"window":@"broken", @"sidesteps":@"missing", @"tractor": @{@"window":@"broken",@"sidesteps":@"missing"}, @"tire":@{@"tire1" : @{@"pressure" : @"120", @"rim":@"good"}}}}; 

输出:

dictionary = { 
     "trailer": { 
      "window": "broken", 
      "sidesteps": "missing", 
      "tractor": { 
       "window": "broken", 
       "sidesteps": "missing" 
      }, 
      "tire": { 
       "tire1": { 
        "pressure": "120", 
        "rim": "good" 
       } 
      } 
     } 
    } 

您可以使用NSMutableDictionary动态创建一个类似的结构。您可以创建多个可变字典并将其添加为另一个字典的对象以实现上述结果。

要转换成你可以这样做JSON数据,

NSError *error; 
NSData *postData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; 

如果你想转换为字符串查看数据,

NSString *jsonString = [[NSString alloc] initWithData:postData encoding:NSStringEncodingConversionAllowLossy]; 
NSLog(@"jsonString = %@", jsonString); 

如果你想这个postbody设置为HTTP请求并将它传递给服务器,您可以将其设置为:

[urlRequest setHTTPBody:postData]; 
+0

当然,这并不能告诉他如何创建“真正的”(动态)字典结构。 (而Apple JSON API很糟糕,因为它创建了一个NSData,而不是直接转向NSString,最好使用其中一个开源版本。) –

+0

这只是一个如何转换为JSON的例子。如果问题是要创建词典,我也会包括它。 – iDev

+1

@ ACB3你是最棒的!谢谢你,这是非常有帮助的。我会尽量检查你提到的字典,但这已经是一个很大的帮助。如果只有我可以投票:)我的声望仍低于15 :(但是,再次感谢你 – baste

1

假设你知道这是不合法的JSON,它只是应该是一个示意图,它表示一组嵌套的NSDictionary对象。外部字典包含键“拖车”,“拖拉机”和“轮胎”,并且每个对应于一个NSDictionary。 “拖车”的NSDictionary具有键“窗口”和“侧步”。其他类似,只有“轮胎”有另一层次的NSDictionary嵌套。

至于从文本字段获取值,这取决于您。你的UI设计是什么样的?如果这些是固定字段(键值始终相同),那么您可以让用户在列表中填充多个文本字段。

+0

我同意你的解释 – baste