如何在iOS Swift中将JSON转换为字符串?

au9on6nz  于 2022-10-31  发布在  Swift
关注(0)|答案(7)|浏览(196)

下面是以下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" : “01034_186893@gmail.com"], ["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,我得到了这个。
[{“值”:“付”,“名称”:“操作”},{“值”:{【行数】:[{【价格】:“1”,“数量”:“1”、“费用”:“1”、“币种”:“INR”,“项目ID”:“DN 001”,“标题”:“为SMSF印度捐款-普通基金”}],“总计”:1 }、“姓名”:“cartJsonData”},{“值”:“奈”,“名”:“中心”},{“值”:“503”,“姓名”:“平面编号”},{“值”:“",“姓名”:“panNumber”},{“名称”:“支付方式”},{“值”:“月度”,“名称”:“提醒频率”},{“名称”:“收货地址1”},{“名称”:“送货地址2”},{“名称”:“发往城市”},{“值”:“印度”,“姓名”:“发往国家/地区名称”},{“值”:“01034_186893@gmail.com”,“姓名”:“送货至电子邮件”},{“值”:“4480101010”,“姓名”:“收货方名字”},{“姓名”:“送货至姓氏”},{“值”:“4480101010”,“姓名”:“收货电话”},{“名称”:“运送目的地州”},{“名称”:“送货地址”},{“值”:“空”,“名称”:“用户ID”},{“值”:“IN”,“名称”:“发往国家/地区”}]
我希望JSON是下面的格式。
[{“名称”:“操作”,“值”:“支付”},{“姓名”:“cartJsonData”,“值”:“{\“总计":1,\“行数":[{\“项目ID":\“DN 002",\“标题":\“为SMSF印度-普通基金捐款",\“数量":\“100",\“币种":\“INR",\“价格":\“1",\“成本":\“100"}]}”},{“名称”:“中心”、“值”:“奈”},{“名”:“平面编号”,“值”:““},{“名称”:“panNumber”,“值”:“ASSDDBBDJD”},{“名称”:“支付方式”},{“名称”:“提醒频率”,“值”:“每月”},{“姓名”:“收货地址1”},{“名称”:“送货地址2”},{“名称”:“发往城市”},{“名称”:“发往国家/地区名称”,“值”:“印度”},{“姓名”:“发往电子邮件”,“值”:“Sudhakar@gmail.com“},{“名称”:“送货至名字”,“值”:“拉贾”},{“姓名”:“送货至姓氏”},{“姓名”:“送货至电话”,“值”:“1234567890”},{【姓名】:“运送目的地州”},{“名称”:“送货地址”},{“名称”:“用户ID”,“值”:“空”},{“名称”:“发往国家/地区”,“值”:“输入”}]
怎么做呢?只需要修改cartJsonData中的值,谁能帮我解决一下?

dbf7pr2w

dbf7pr2w1#

试试这个。

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: .utf8) // the data will be converted to the string
            print(convertedString) // <-- here is ur string  

        } catch let myJSONError {
            print(myJSONError)
        }

    }
xpszyzbs

xpszyzbs2#

SWIFT*(截至2020年12月3日)*

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)
    }

}
k2arahey

k2arahey3#

雨燕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."])
wkftcu5l

wkftcu5l4#

使用新的基于Encodable的API,您可以使用String(init:encoding)初始化程序获得JSON文件的字符串版本。

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)
    }
}
1mrurvl1

1mrurvl15#

  • 斯威夫特4.x
  • 扩展码10.x

如果您使用的是Swifty JSON

var stringfyJSOn  = yourJSON.description

参考或更多信息

https://github.com/SwiftyJSON/SwiftyJSON

iq0todco

iq0todco6#

将JSON对象转换为String的简单方法是:1.首先创建一个JSON下标值,例如jsonObject[“fieldName”] 2.使用'.stringValue'属性检索实际的字符串等效项(jsonObject[“fieldName”].stringValue)

a9wyjsp7

a9wyjsp77#

Xcode 11,将字符串转换为NSString对我很有效。

func jsonToString(json: AnyObject) -> String{
    do {
        let data1 = try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted)
        let convertedString = String(data: data1, encoding: String.Encoding.utf8) as NSString? ?? ""
        debugPrint(convertedString)
        return convertedString as String
    } catch let myJSONError {
        debugPrint(myJSONError)
        return ""
    }
}

相关问题