Как отправить JSON со словарем и массивом в iOS(Цель c)?

Я пытаюсь отправить JSON в websocket. требуемый формат приходит с запятыми, тогда как когда я добавляю элемент в словарь, он создает точку с запятой.

Требуемый формат:

{"key":"driver_location_updates","driverID":40,"coordinates":[25.22632,55.2844576]}

Формат, который я создал:

"driver_location_updates" =    
   {
       coordinates = ( "24.96046731716484","67.05977029173361"); 
       driverID = 16;
       key = "driver_location_updates"; 
   };
}

3 ответа

Как вы сказали в комментариях

  1. ключ не с кавычками.

  2. После каждого значения стоит точка с запятой

  3. Круглая скобка в координатах

Пояснение:

  1. Поскольку ваш ключ состоит из одного слова, предполагается, что он является строкой (так как есть символы, а не целые числа). Попробуйте сохранить ключ, как два слова, как key mine или же key_2

Выход =>

  1. Потому что после каждого ключа в словаре стоит точка с запятой. (Синтаксис x-кода для словаря).

  2. Потому что массив в консоли представлен в (...) где словарь будет представлен в {...},

Теперь, более того, если вы наблюдаете, есть = в словаре но в json есть :, Это просто потому, что нотация словаря массива отличается от json.

Рассматривая вышеизложенные пункты, вы понимаете, что оба они одинаковы.

Из формата, я думаю, вы использовали [NSString stringWithFormat:@"%@"] или получил "JSON" от звонка -[NSDictionary description],

Это создает не JSON, а общую удобочитаемую нотацию структуры данных. Это похоже на JSON, и у меня была та же самая проблема много лет назад:)

использование NSJSONSerialization чтобы получить настоящий JSON:

NSData *JSONData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 &error];

или напрямую писать в поток

[NSJSONSerialization writeJSONObject:dictionary toStream:writeStream options:0 error:&error]

Вы должны использовать JSONSerialization конвертировать словарь в JSON, я думаю.

let dictionary: [String: Any] = ["key":"driver_location_updates", "driverID": 40, "coordinates": [25.22632,55.2844576]]

let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: [])
let jsonString = String(data: jsonData!, encoding: .utf8)
print(jsonString)

Я надеюсь, что вы знаете, как преобразовать ответ в Objective C

Другие вопросы по тегам