Подтвердить что ты не робот

Преобразование NSArray → JSON → NSData → Сервер PHP → Представление JSON

Я преобразовываю массив NSDictionaries в данные JSON со следующим...

Создайте мои данные...

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

for (int i = 0; i < 2; i++) {
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"MySong", @"title",
                                  @"MyArtist", @"artist",
                                  nil];
    [arrayOfDicts addObject:dict];         
}
 NSArray *info = [NSArray arrayWithArray:arrayOfDicts];
 NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info 
      options:NSJSONWritingPrettyPrinted error:&error];

тогда отправьте так...

NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setPostValue:jsonData forKey:@"songs"];
    [request setDelegate:self];
    request.tag = TAG_LOAD_SONGS;
    [request startAsynchronous];

Это отправляет NSData на мой сервер, но как я могу использовать его в php... На самом деле это просто куча случайных чисел, если я печатаю его с моего сервера, и я попытался использовать json_encode, но я не думаю это предназначено для сырых данных...

Любая помощь будет замечательной!

EDIT: Вот ответ php...

echo $_POST['songs'];

<5b0a2020 7b0a2020 20202274 69746c65 22203a20 224d7953 6f6e6722 2c0a2020 20202261 72746973 7422203a 20224d79 41727469 7374220a 20207d2c 0a20207b 0a202020 20227469 746c6522 203a2022 4d79536f 6e67222c 0a202020 20226172 74697374 22203a20 224d7941 72746973 74220a20 207d0a5d>

Вот ответ на NSLoging в Xcode...

NSLog(@"Info: %@", info);

Информация: (       {       artist = MyArtist;       title= MySong;   },       {       artist = MyArtist;       title= MySong;   }   )

4b9b3361

Ответ 1

Оказывается, мне нужно было сделать это вот так:

Создать Мои данные:

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

for (int i = 0; i < 2; i++) {
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"MySong", @"title",
                                  @"MyArtist", @"artist",
                                  nil];
    [arrayOfDicts addObject:dict];         
}
 NSArray *info = [NSArray arrayWithArray:arrayOfDicts];

И Отправлено так:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:info 
          options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    // Start request
    NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setPostValue:jsonString forKey:@"songs"];
    [request setDelegate:self];
    [request startAsynchronous];

Ключом было преобразовать информацию в NSData, а затем в строку JSON, которую я отправил на свой сервер, а не просто отправить raw NSData.

Спасибо всем за помощь!

Ответ 2

<?php $array = json_decode($_POST['songs']); ?> должен работать.

Ответ 3

Вы не можете отправить его таким образом. NSJSONSerialization предназначен для использования iOS. Это в основном плистика. Вам понадобится способ его декодирования на PHP, и я сомневаюсь, что он существует. Вместо этого вам нужно отправить строку JSON. Я не уверен, что вы подразумеваете под "листьями котировки вокруг заголовков". Что они там делают в первую очередь? Вы можете проверить исходную строку JSON здесь?