Как сохранить значения JSON в МАССИВЕ / строке

#iphone #objective-c #ios4 #iphone-sdk-3.0

#iPhone #objective-c #ios4 #iphone-sdk-3.0

Вопрос:

У меня есть следующее значение JSON:

 -(
            { Key   = IsEmail;
              Value = 1;     },

            { Key   = TrackingInterval;
              Value = 20;    },

            { Key   = IsBackup;
              Value = 1;     },

            { Key   = WipeOnRestore;
              Value = 1;     }
)
  

Как я могу выполнить синтаксический анализ этого объекта в массив или строку? — т.е. все ключевые значения должны храниться в массиве, а каждое значение — в другом массиве.

Пожалуйста, помогите мне с этим.

Спасибо 🙂

Ответ №1:

В этом подходе используется json-framework.

Я сократил ваш пример:

 NSString *jsonString = @"[{"Key":"IsEmail","Value":"1"},{"Key":"TrackingInterval","Value":"20"},{"Key":"IsBackup","Value":"1"}]";

NSMutableArray *keys = [NSMutableArray array];
NSMutableArray *values = [NSMutableArray array];    

NSArray *json = [jsonString JSONValue];

for (NSDictionary *pair in json) {
    [keys addObject:[pair objectForKey:@"Key"]];
    [values addObject:[pair objectForKey:@"Value"]];        
}

NSLog(@"%@", keys); 
NSLog(@"%@", values);
  

Вывод:

 2011-05-18 14:23:55.698 [36736:207] (
    IsEmail,
    TrackingInterval,
    IsBackup
)
2011-05-18 14:23:55.700 [36736:207] (
    1,
    20,
    1
)
  

Комментарии:

1. Почему вы использовали два отдельных массива вместо использования словаря?

2. @FreeAsInBeer потому что об этом попросил OP: «… значения каждого ключа должны храниться в массиве, а каждое значение — в другом массиве».

3. =) Приятно. Я не прочитал конец его вопроса. Это очень странный способ его хранения. Как правило, по моему опыту, вы не хотите хранить связанную информацию в отдельных объектах без хорошей связи между ними. В этом случае единственной ссылкой является индекс, который может быть легко испорчен.

4. @FreeAsInBeer вы абсолютно правы, но я был не в настроении возражать, поэтому я просто закодировал прямой ответ на требования OP.

Ответ №2:

Ответ №3:

Ваши данные не являются vald json, возможно, вы захотите структурировать их примерно так:

 var theObj = { IsEmail: 1, TrackingInterval: 20, IsBackup: 1, WipeOnRestore: 1 };
  

Затем вы могли бы заполнить свои массивы ключей и значений примерно так:

 var keys = new Array();
var values = new Array();

for (prop in theObj) {
    keys.push(prop);
    values.push(theObj[prop]);
}
  

Ответ №4:

если JSON представлен в приведенном ниже формате,

 responseString=[ {
        Key = IsEmail;
        Value = 1;
    },
            {
        Key = TrackingInterval;
        Value = 20;
    },
            {
        Key = IsBackup;
        Value = 1;
    },
            {
        Key = WipeOnRestore;
        Value = 1;
    }] 

 then,

NSArray *resultArray=[responseSrting JSONValue];

NSMuatbleArray *keyArray=[[NSMutableArray alloc] init];

NSMutableArray *valueArray=[[NSMutableArray alloc] init];

for(NSDictionary *dict in resultsArray){

[keyArray addObject:[dict objectForKey:@"Key"]];

[valueArray addObject:[dict objectForKey:@"Value"]];

}
  

затем все ваши ключи хранятся в keyArray, а все ваши значения — в valueArray