【问题标题】:How assign value to a JSON string?如何为 JSON 字符串赋值?
【发布时间】:2015-04-17 10:25:40
【问题描述】:

我从我的网络服务中获取这个 JSON 对象

0:  {
Username: "John"
Password: "12345"
Position: "Admin"
Job: "Developer"
ResourceJobId: 1
}

当我尝试为用户名 JSON 字符串分配一个值时,我得到一个语义错误:

id obj = [NSJSONSerialization JSONObjectWithData:data
                                                 options:NSJSONReadingAllowFragments
                                                   error:&error];
            for (NSDictionary *dictionary in array) {
                NSString *usernameString = @"";
//this line of code gives me an error: Expression is not assignable               
[dictionary objectForKey:@"Username"] = usernameString   ;

我知道如何使用 NSJSONSerialization 类获取 JSON 对象,但我的目标是如何将值 @"" 分配给 JSON 对象。 那么如何将值 @"" 分配给用户名 JSON 字符串?

【问题讨论】:

  • 使用 [字典 setValue@"" forKey@""]
  • 我在任何地方都看不到“数组”,所以这不是您的完整代码。向我们展示您的完整代码。我也不知道你所说的“语义错误”是什么意思。你的意思是编译器的错误信息吗?什么错误信息?最好复制粘贴。
  • 这样,我得到这个错误 [__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

标签: ios objective-c json nsdictionary nsmutabledictionary


【解决方案1】:

当您尝试从array 获取dictionary 时。它不是可变字典,因此您需要在从Array 获取数据时创建NSMutableDictionary。以下代码将帮助您更改username

for (NSMutableDictionary *dictionary in array)
{
   NSMutableDictionary* dictTemp = [NSMutableDictionary dictionaryWithDictionary:dictionary];

   [dictTemp setObject:usernameString forKey@"Username"];

   [_arrayList replaceObjectAtIndex:index withObject:dictTemp];
}

【讨论】:

  • @junko76,告诉我你想要别的东西。
【解决方案2】:

嗯,你的赋值操作写错了,确实应该是这样的:

  • 如果你需要从字典中获取值

    usernameString = [dictionary objectForKey:@"Username"];
    
  • 如果你想给你的字典设置一个值,首先你的字典应该是NSMutableDictionary

    [dictionary setObject:usernameString forKey:@"Username"];
    

【讨论】:

  • 我想给我的字典设置一个值
【解决方案3】:
 NSData *data = [NSData dataWithContentsOfURL:url];
        NSError *error;
        id obj = [NSJSONSerialization JSONObjectWithData:data
                                                 options:NSJSONReadingAllowFragments
                                                   error:&error];

        if(!error && [obj isKindOfClass:[NSArray class]]){
            NSArray *array = (NSArray *)obj;
            Booking *booking = nil;
            for (NSMutableDictionary *dictionary in array) {
               NSString *usernameString = @"";
//this line of code gives me an error: Expression is not assignable               
[dictionary objectForKey:@"Username"] = usernameString;

是的,是编译器错误

【讨论】:

    【解决方案4】:

    您需要有一个可变字典才能更改值。试试这个

    for (NSDictionary *dictionary in array) {
       NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary];
       NSString *usernameString = @"";     
       [mutableDictionary setValue:@"" forKey:usernameString];
    }       
    

    【讨论】:

      【解决方案5】:

      即使答案是正确的,我想补充一点,您不必自己做。 NSJSONSerialization 已经有了解决方案。只需将以下选项之一作为选项传递:

      NSJSONReadingMutableContainers = (1UL << 0),
      NSJSONReadingMutableLeaves = (1UL << 1),
      

      读取 JSON 时。

      【讨论】:

      • 我本来想加一票,但我是 satckoverflow 的新手,所以我不允许这样做。谢谢
      • 没问题,我不是为了代表,而是为了帮忙。不客气。
      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2021-05-22
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多