将 NSString 数据转换为 JSON 格式

Posted

技术标签:

【中文标题】将 NSString 数据转换为 JSON 格式【英文标题】:Converting NSString data into the JSON format 【发布时间】:2015-12-31 10:42:13 【问题描述】:

这是我对联系人手机号码和姓名的回复

2015-12-31 13:39:58.563 LCall[1448:53537] 888-555-1212
2015-12-31 13:39:58.563 LCall[1448:53537] John Appleseed
2015-12-31 13:39:58.564 LCall[1448:53537] (415) 555-3695
2015-12-31 13:39:58.565 LCall[1448:53537] Kate Bell
2015-12-31 13:39:58.565 LCall[1448:53537] 555-522-8243
2015-12-31 13:39:58.565 LCall[1448:53537] Anna Haro
2015-12-31 13:39:58.566 LCall[1448:53537] (408) 555-3514
2015-12-31 13:39:58.566 LCall[1448:53537] Daniel Higgins
2015-12-31 13:39:58.567 LCall[1448:53537] 555-610-6679
2015-12-31 13:39:58.567 LCall[1448:53537] David Taylor
2015-12-31 13:39:58.568 LCall[1448:53537] (707) 555-1854
2015-12-31 13:39:58.568 LCall[1448:53537] Hank Zakroff`

我想把他们的手机号码转换成下面的表格

"contacts":["+918146411786","8528840200"]

或 JSON 格式。

【问题讨论】:

为什么要转成JSON?它只是一次性转换吗?或者你会经常这样做吗?如果是前者,您可以在 Notepad++ 等文本编辑器中使用正则表达式。在后一种情况下,我会编写一个小程序来完成它。如果您从 Web 服务解析这些结果,那么您将需要通过字符串处理采取几个步骤来获得所需的 JSON。 oak 我想将此结果传递给 Web 服务,那么步骤是什么 【参考方案1】:

你可以试试这样的:

-(void)parseResultsString:(NSString *)input into:(NSString *)output 
    int phoneNumberStartingIndex = 40;
    NSMutableString* result = @"\"contacts\":[";

    NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet];
    NSArray *rows = [input componentsSeparatedByCharactersInSet:separator];
    int counter = 0;
    NSString *comma = @"";

    for (NSString* line in rows) 
        if(counter % 2 == 0)  // Skip every 2nd line
            NSString *number = [line substringFromIndex:phoneNumberStartingIndex];
            [result appendFormat:@"%@\"%@\"", comma, number];
            comma = @",";
        
    
    [result appendString@"]"];
    output = result;

上面做了一些假设,(1)输入的格式总是意味着电话号码在每一行的位置完全相同,(2)格式总是意味着电话号码是只在奇数行。

如果您需要将数字解析为某种格式,那么您可以在将数字附加到结果字符串之前添加另一个函数来格式化数字。

【讨论】:

【参考方案2】:

以下是我的假设(在回答问题时不必做出任何假设):

    初始数据包含在 name1、number1、name2、number2 等数组中。 您想提取数字并将它们放入字典中,其中“联系人”作为键,值作为数字数组。 您希望将字典格式化为 JSON 以便发送到某个地方。

NSArray *namesAndNumbers = ...;
NSAssert(([namesAndNumbers count] & 1) == 0, @"Input array has odd number of elements");
NSMutableArray *numbers = [NSMutableArray new];
for (NSUInteger i = 1; i < [namesAndNumbers count]; i += 2) 
    [numbers addObject:namesAndNumbers[i]];

NSDictionary *contacts = @ @"contacts" : numbers ;
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:containts
                                                   options:0
                                                     error:&error];
if (jsonData) 
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    // Do something with string
 else 
    NSLog(@"Failed to format JSON: %@", [error localizedDescription]);

【讨论】:

以上是关于将 NSString 数据转换为 JSON 格式的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据从 NSData 转换为 NSDictionary

将 JSON 数据的 NSString 转换为 NSArray [关闭]

如何将 NSString 从 JSON 转换为 NSDictionary? [关闭]

将 NSString 转换为具有日期格式的 NSString 块

以 00:00:00 时钟格式将 NSTimeInterval 转换为 NSString

如何将二进制数据转换为 NSstring?