#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:
Refere
Ответ №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