Как конвертировать JSON в String в ios Swift?

Вот код для следующего выхода Json:

let params : [[String : AnyObject]]  = [["name" : "action", "value" : "pay" ],["name" : "cartJsonData" , "value" : ["total": 1,"rows":[["quantity": "1" ,"title":"Donation for SMSF India - General Fund","price":"1","itemId":"DN001","cost": "1","currency":"INR"]]]], ["name" : "center", "value" : "Chennai"], ["name" : "flatNumber", "value" : "503"], ["name" : "panNumber", "value" : ""], ["name" : "payWith"], ["name" : "reminderFrequency","value" : "Monthly"],  ["name" : "shipToAddr1"], ["name" : "shipToAddr2"], ["name" : "shipToCity"], ["name" : "shipToCountryName" , "value" : "India"], ["name" : "shipToEmail", "value" : "[email protected]"], ["name" : "shipToFirstName" , "value": "4480101010"], ["name" : "shipToLastName"], ["name" : "shipToPhone", "value" : "4480101010"], ["name" : "shipToState"], ["name" : "shipToZip"], ["name" : "userId", "value" : "null"], ["name" : "shipToCountry", "value" : "IN"]]

var jsonObject: NSData? = nil

do {
   jsonObject = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions())
   print(jsonObject) // This will print the below json. 
} 
catch{}

Распечатав jsonObject, я получил этот.

[{ "value" : "pay", "name" : "action" }, { "value" : { "rows": [{ "цена": "1" , "количество": "1" , "стоимость": "1" , "валюта": "INR", "itemId": "DN001", "title": "Пожертвование для SMSF India - Общий фонд" }], "total": 1}, "name" : "cartJsonData" }, { "value" : "Chennai", "name" : "center" }, { "value" : "503", "name" : "flatNumber" }, { "value" : "", "name" : "panNumber"}, { "name" : "payWith"}, { "value" : "Ежемесячно "," имя ":" reminderFrequency"}, { "name" : "shipToAddr1"}, { "name" : "shipToAddr2"}, { "name" : "shipToCity"}, { "value" : "India", "name" : "shipToCountryName"}, { "value" : "[email protected]", "name" : "shipToEmail"}, { "value" : "4480101010", "name" : "shipToFirstName"}, { "name" : "shipToLastName"}, { "value" : "4480101010", "name" : "shipToPhone"}, { "name" : "shipToState"}, { "name" : "shipToZip"}, { "value" : "null", "name" : "userId"}, { "value" : "IN", "name" : "shipToCountry"}]

И я хочу, чтобы JSON находился в следующем формате.

[{ "name" : "action", "value" : "pay" }, { "name" : "cartJsonData", " "стоимость": "{\ "total\": 1, \ "rows\": [{\ "itemId\": \ "DN002\", \ "title\": \ "Пожертвование для SMSF Индия - общий Фонд \" \ "количество \":\ "100 \",\ "валюта \":\ "INR \",\ "цена \":\ "1 \",\ "стоимость \": \ "100\" }]}" }, { "name" : "center", "value" : "Chennai" }, { "name" : "flatNumber", " "value" : ""}, { "name" : "panNumber", "value" : "ASSDDBBDJD"}, { "name" : "payWith"}, { "name" : "reminderFrequency", "value" : "Monthly" }, { "name" : "shipToAddr1"}, { "name" : "shipToAddr2"}, { "name" : "shipToCity"}, { "name" : "shipToCountryName", "value" : "India"}, { "name" : "shipToEmail", "value" : "[email protected]"}, { "name" : "shipToFirstName", "value" : "Raju"}, { "name" : "shipToLastName"}, { "name" : "shipToPhone", "value" : "1234567890"}, { "name" : "shipToState"}, { "name" : "shipToZip"}, { "name" : "userId", "value" : "null"}, { "name" : "shipToCountry", "value" : "IN"}]

Как это можно сделать? Необходимо изменить только значение в cartJsonData. Может ли кто-нибудь помочь мне в этом, чтобы решить эту проблему?

Ответ 1

Попробуйте это.

func jsonToString(json: AnyObject){
        do {
          let data1 =  try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted) // first of all convert json to the data
            let convertedString = String(data: data1, encoding: NSUTF8StringEncoding) // the data will be converted to the string
            print(convertedString) // <-- here is ur string  

        } catch let myJSONError {
            print(myJSONError)
        }

    }

Ответ 2

Свифт (по состоянию на 10 июля 2018 г.)

func jsonToString(json: AnyObject){
    do {
        let data1 =  try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) // first of all convert json to the data
        let convertedString = String(data: data1, encoding: String.Encoding.utf8) // the data will be converted to the string
        print(convertedString ?? "defaultvalue")
    } catch let myJSONError {
        print(myJSONError)
    }

}

Ответ 3

Swift 4.0

static func stringify(json: Any, prettyPrinted: Bool = false) -> String {
    var options: JSONSerialization.WritingOptions = []
    if prettyPrinted {
      options = JSONSerialization.WritingOptions.prettyPrinted
    }

    do {
      let data = try JSONSerialization.data(withJSONObject: json, options: options)
      if let string = String(data: data, encoding: String.Encoding.utf8) {
        return string
      }
    } catch {
      print(error)
    }

    return ""
}

Использование

stringify(json: ["message": "Hello."])

Ответ 4

Используя новый API на основе Encodable, вы можете получить строковую версию файла JSON, используя инициализатор String (init: encoding). Я запустил это на игровой площадке, и последнее печатное выражение дало мне

json {"year":1961,"month":4}

Похоже, что формат использует минимальное количество символов в деталях.

struct Dob: Codable {
    let year: Int
    let month: Int
}

let dob = Dob(year: 1961, month: 4)
print("dob", dob)

if let dobdata = try? JSONEncoder().encode(dob) {
    print("dobdata base64", dobdata.base64EncodedString())
    if let ddob = try? JSONDecoder().decode(Dob.self, from: dobdata) {
        print("resetored dob", ddob)
    }
    if let json = String(data: dobdata, encoding: .utf8) {
      print("json", json)
    }
}

Ответ 5

Простой способ преобразовать объект JSON в строку: 1. Сначала создайте значение индекса JSON, например, JSONObject [ "FIELDNAME"] 2. Используйте свойство .stringValue для получения фактической эквивалентности строки (jsonObject ["fieldName"]. StringValue)