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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36370541/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 08:50:48  来源:igfitidea点击:

How to convert JSON to String in ios Swift?

iosjsonswift

提问by Divya Ponnuraj

Here is the code for the below Json output:

这是以下 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{}

By printing jsonObject, I got this one.

通过打印 jsonObject,我得到了这个。

[{ "value": "pay", "name": "action" }, { "value": { "rows": [{ "price": "1", "quantity": "1", "cost": "1", "currency": "INR", "itemId": "DN001", "title": "Donation for SMSF India - General Fund" }], "total": 1 }, "name": "cartJsonData" }, { "value": "Chennai", "name": "center" }, { "value": "503", "name": "flatNumber" }, { "value": "", "name": "panNumber" }, { "name": "payWith" }, { "value": "Monthly", "name": "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" }]

[{ "value": "pay", "name": "action" }, { "value": { "rows": [{ "price": "1", "quantity": "1", "cost" :“1”,“货币”:“INR”,“itemId”:“DN001”,“title”:“SMSF India - General Fund 的捐赠”}],“total”:1 },“name”:“cartJsonData " }, { "value": "Chennai", "name": "center" }, { "value": "503", "name": "flatNumber" }, { "value": "", "name" : "panNumber" }, { "name": "payWith" }, { "value": "Monthly", "name": "reminderFrequency" }, { "name":"shipToAddr1" }, { "name": "shipToAddr2" }, { "name": "shipToCity" }, { "value": "India", "name": "shipToCountryName" }, { "value": "01034_186893 @gmail.com", "name": "shipToEmail" }, { "value": "4480101010", "name": "shipToFirstName" }, { "name": "shipToLastName" }, { "value": "4480101010 ", "name": "shipToPhone" }, { "name": "shipToState" }, { "name": "shipToZip" }, { "value": "null", "name": "userId" }, { “值”:“IN”,“名称”:“shipToCountry”}]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" }]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" }]{ "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" }]{ "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" }]"shipToEmail" }, { "value": "4480101010", "name": "shipToFirstName" }, { "name": "shipToLastName" }, { "value": "4480101010", "name": "shipToPhone" } , { "name": "shipToState" }, { "name": "shipToZip" }, { "value": "null", "name": "userId" }, { "value": "IN", "name ": "shipToCountry" }]"shipToEmail" }, { "value": "4480101010", "name": "shipToFirstName" }, { "name": "shipToLastName" }, { "value": "4480101010", "name": "shipToPhone" } , { "name": "shipToState" }, { "name": "shipToZip" }, { "value": "null", "name": "userId" }, { "value": "IN", "name ": "shipToCountry" }]"shipToZip" }, { "value": "null", "name": "userId" }, { "value": "IN", "name": "shipToCountry" }]"shipToZip" }, { "value": "null", "name": "userId" }, { "value": "IN", "name": "shipToCountry" }]

And I want the JSON to be in the below format.

我希望 JSON 采用以下格式。

[{ “name”: “action”, “value”: “pay” }, { “name”: “cartJsonData”, “value”: “{\”total\”:1,\”rows\”:[{\”itemId\”:\”DN002\”,\”title\”:\”Donation for SMSF India - General Fund\”,\”quantity\”:\”100\”,\”currency\”:\”INR\”,\”price\”:\”1\”,\”cost\”:\”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” }]

[{ “name”: “action”, “value”: “pay” }, { “name”: “cartJsonData”, “value”: “{\”total\”:1,\”rows\”:[{ \”itemId\”:\”DN002\”,\”title\”:\”为SMSF 印度捐赠 - 普通基金\”,\”数量\”:\”100\”,\”货币\”:\” INR\”,\”price\”:\”1\”,\”cost\”:\”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” }]

How can it be done? Only the value in cartJsonDataneeds to be changed. Can someone help me on this to solve it?

怎么做到呢?只cartJsonData需要更改in 的值。有人可以帮我解决这个问题吗?

回答by ak sacha

Try this.

尝试这个。

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

    }

回答by BennyTheNerd

Swift(as of July 10, 2018)

斯威夫特(截至 2018 年 7 月 10 日)

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

}

回答by Minh Hoang

Swift 4.0

斯威夫特 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 ""
}

Usage

用法

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

回答by Abdul Karim

  • Swift 4.x
  • xcode 10.x
  • 斯威夫特 4.x
  • Xcode 10.x

if you are using Swifty JSON

如果您使用的是 Swifty JSON

var stringfyJSOn  = yourJSON.description

For Reference or more information

供参考或更多信息

https://github.com/SwiftyJSON/SwiftyJSON

https://github.com/SwiftyJSON/SwiftyJSON

回答by MarkAurelius

Using the new Encodable based API, you can get the string version of a JSON file using String(init:encoding) initialiser. I ran this in a Playground and the last print statement gave me

使用新的基于 Encodable 的 API,您可以使用 String(init:encoding) 初始化程序获取 JSON 文件的字符串版本。我在操场上运行了这个,最后一个打印语句给了我

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

It seems that the format uses the minimum number of characters by detail.

似乎该格式按细节使用了最少的字符数。

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

回答by tonderaimuchada

A simple way to convert a JSON object to a String is: 1. First create a JSON subscript value e.g. jsonObject["fieldName"] 2. Use the '.stringValue' property to retrieve the actually String equivalence (jsonObject["fieldName"].stringValue)

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

回答by Jignesh Kanani

Xcode 11, converted String to NSString is working for me.

Xcode 11,将 String 转换为 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 ""
    }
}