【问题标题】:Create JSON format using NSString as a key and values使用 NSString 作为键和值创建 JSON 格式
【发布时间】:2016-04-27 11:15:57
【问题描述】:

我有类似这样的JSON 格式要求。

{ 
"first_name" : "XYZ", 
"last_name" : "ABC" 
}

我在NSString 中有值。

NSString strFName = @"XYZ"; 
NSString strLName = @"ABC";
NSString strKeyFN = @"first_name";
NSString strKeyLN = @"last_name";

我使用NSMutableDictionary

NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];
[dict setObject:strFName forKey:strKeyFN];
[dict setObject:strLName forKey:strKeyLN];

那么输出就是

{
first_name = XYZ,
last_name = ABC
}

所以我不想用“=”来分隔键和值,而是用“:”来分隔键和值

stack overflow questions 的大部分内容我都去过,但没有帮助仅在输出中获得“=”

所以请帮忙?

【问题讨论】:

标签: ios objective-c json nsmutabledictionary


【解决方案1】:

这是你的答案:

NSString *strFName = @"XYZ";
NSString *strLName = @"ABC";
NSInteger number = 15;

NSString *strKeyFN = @"first_name";
NSString *strKeyLN = @"last_name";
NSString *numValue = @"Number";

NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];

[dic setObject:strFName forKey:strKeyFN];
[dic setObject:strLName forKey:strKeyLN];
[dic setObject:[NSNumber numberWithInt:number] forKey:numValue];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[NSArray arrayWithObject:dic] options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON  %@",jsonString);

【讨论】:

  • @ivaran 谢谢你,但如果我想从双引号中跳过数字意味着我必须做什么?
  • 是的,这真的很有用!非常感谢!
【解决方案2】:

您在 NSDictionary 之后编写此代码

NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
    NSString *jsonstr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

【讨论】:

  • 是的,这确实很有帮助,但它也在为数字添加双引号,所以我不想要双引号,而不是我必须做的?像这样 { "Number" : 7 }
【解决方案3】:
NSString *strFName = @"XYZ";
NSString *strLName = @"ABC";
NSString *strKeyFN = @"first_name";
NSString *strKeyLN = @"last_name";
NSDictionary *ictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                      strKeyFN, strFName,strKeyLN, strLName,nil];

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"dictionary as string:%@", jsonString);

【讨论】:

    【解决方案4】:
    NSString *strFName = @"ABC";
    NSString *strLName = @"XYZ";
    
    NSString *strKeyFN = @"last_name";
    NSString *strKeyLN = @"first_name";
    
    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
    
    [dict setObject:strFName forKey:strKeyFN];
    [dict setObject:strLName forKey:strKeyLN];
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[NSArray arrayWithObject:dict] options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonStrng = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"Your required JSON is %@",jsonStrng);
    

    【讨论】:

      【解决方案5】:

      试试这个:-

      NSString *cleanedString1 =[strFName stringByReplacingOccurrencesOfString:@"/"" withString:@""];
      NSString *cleanedString2 =[strLName stringByReplacingOccurrencesOfString:@"/"" withString:@""];
      
      NSDictionary *Dict = [NSDictionary dictionaryWithObjectsAndKeys:
                                      cleanedString1, strKeyFN,
                                      cleanedString2, strKeyLN,nil];
      
      NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:Dict options:NSJSONWritingPrettyPrinted error:&error];
      NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
      NSLog(@"jsonData as string:\n%@", jsonString);
      

      【讨论】:

      • 是的,这真的很有帮助,谢谢,但它也在给数字添加双引号,所以我不想要双引号,而不是我必须做的?像这样 { "Number" : 7 }
      • 如果你没有看到这个例子stackoverflow.com/questions/26817932/…
      【解决方案6】:

      这个非常健壮的代码可以实现你的目标

       NSDictionary *userDic = @{strKeyFN:strFName,strKeyLN:strLName};
      

      【讨论】:

        【解决方案7】:

        您必须将NSMutableDictionary 转换为NSData

        然后将NSData转换成你想要的json字符串

        NSString *strFName = @"XYZ";
         NSString *strLName = @"ABC";
         NSString *strKeyFN = @"first_name";
         NSString *strKeyLN = @"last_name";
         NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];
         [dict setObject:strFName forKey:strKeyFN];
         [dict setObject:strLName forKey:strKeyLN];
        
        NSData *data = [NSJSONSerialization dataWithJSONObject:dict    options:NSJSONWritingPrettyPrinted error:nil];
        
        NSString *jasonString= [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        

        【讨论】:

        • 是的,这真的很有帮助,但可以说我有数字而且我不想要双引号,而不是我能做的吗?
        • 在 NSDictionary 中的键总是 String 但它的值可以是 number 或 string 。如果你使用值作为数字,你不会得到双引号
        猜你喜欢
        • 2019-03-16
        • 2021-07-21
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多