কনসোলে সুইফট অভিধানগুলি প্রিন্ট করার কোনও উপায় আছে কি?


92
NSDictionary *dictionary = @{@"A" : @"alfa",
                             @"B" : @"bravo",
                             @"C" : @"charlie",
                             @"D" : @"delta",
                             @"E" : @"echo",
                             @"F" : @"foxtrot"};
NSLog(@"%@", dictionary.description);

কনসোলে নিম্নলিখিতগুলি মুদ্রণ করে:

{
    A = alfa;
    B = bravo;
    C = charlie;
    D = delta;
    E = echo;
    F = foxtrot;
}

let dictionary: [String : String] = ["A" : "alfa",
                                     "B" : "bravo",
                                     "C" : "charlie",
                                     "D" : "delta",
                                     "E" : "echo",
                                     "F" : "foxtrot"];
print(dictionary)

কনসোলে নিম্নলিখিতগুলি মুদ্রণ করে:

["B": "bravo", "A": "alfa", "F": "foxtrot", "C": "charlie", "D": "delta", "E": "echo"]

সুইফট-এ কি প্রিন্ট মুদ্রিত অভিধানগুলিতে পাওয়ার কোনও উপায় আছে যেখানে প্রতিটি কী-মান জোড় একটি নতুন লাইন দখল করে?


7
আপনি dumpউদাহরণস্বরূপ ব্যবহার করতে পারেন , যদি লক্ষ্যটি অভিধানটি পরীক্ষা করা হয়। stackoverflow.com/docamentation/swift/3966/logging-in-swift/…
এরিক আয়া

13
print(dictionary as! NSDictionary) সস্তা কৌতুক?
বেসজেন

আমি সত্যিই ডাম্প () এর পরামর্শ দিচ্ছি কারণ এটি কোনও কোড লিখতে বা কাস্ট করার প্রয়োজন হয় না। @ এরিকআয়া, আপনি যদি এই মন্তব্যটির সাথে একটি উত্তর পোস্ট করেন, আমি এটি উত্তর হিসাবে চিহ্নিত করব।
টোল্যান্ড

4
টুইটারে আমি আউটপুট উদাহরণ দিয়ে একটি উত্তর তৈরি করেছি।
এরিক আয়া

উত্তর:


99

আপনি ডাম্প ব্যবহার করতে পারেন , উদাহরণস্বরূপ, যদি লক্ষ্যটি অভিধানটি পরীক্ষা করা হয়। dumpসুইফটের স্ট্যান্ডার্ড লাইব্রেরির অংশ।

ব্যবহার:

let dictionary: [String : String] = ["A" : "alfa",
                                     "B" : "bravo",
                                     "C" : "charlie",
                                     "D" : "delta",
                                     "E" : "echo",
                                     "F" : "foxtrot"]

dump(dictionary)

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


dump প্রতিচ্ছবি (মিররিং) এর মাধ্যমে কোনও সামগ্রীর সামগ্রী মুদ্রণ করে।

একটি অ্যারের বিশদ ভিউ:

let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)

মুদ্রণ:

Elements 4 উপাদান
- [0]: জো
- [1]: জেন
- [2]: জিম
- [3]: জয়েস

একটি অভিধানের জন্য:

let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)

মুদ্রণ:

Key 3 কী / মান জোড়া
▿ [0]: (2 উপাদান)
- .0: বার
- .1: 33
▿ [1]: (2 উপাদান)
- .0: বাজ
- .1: 42
▿ [2]: ( 2 উপাদান)
- .0: foo
- .1: 10

dumpহিসাবে ঘোষণা করা হয় dump(_:name:indent:maxDepth:maxItems:)

প্রথম প্যারামিটারের কোনও লেবেল নেই।

অন্যান্য প্যারামিটারগুলি উপলব্ধ রয়েছে, nameঅবজেক্টটি পরিদর্শন করার জন্য একটি লেবেল সেট করতে চান :

dump(attributes, name: "mirroring")

মুদ্রণ:

▿ মিররিং: 3 কী / মান জোড়া
▿ [0]: (2 উপাদান)
- .0: বার
- .1: 33
▿ [1]: (2 উপাদান)
- .0: বাজ
- .1: 42
▿ [2] : (2 উপাদান)
- .0: foo
- .1: 10

আপনি কেবলমাত্র একটি নির্দিষ্ট সংখ্যক আইটেমের সাথে মুদ্রণ করতে পারবেন, যার maxItems:সাথে নির্দিষ্ট গভীরতার সাথে অবজেক্টটি বিশ্লেষণ করতে maxDepth:এবং এর সাথে মুদ্রিত অবজেক্টের ইন্ডেন্টেশন পরিবর্তন করতে পারবেন indent:


4
এটি প্রিন্ট করা JSON নয়, এটি কেবল কনসোলটিতে আ ভেরিয়েবল ডাম্পিং করছে - বৈধ JSON নয়। যদিও এটি ওপির প্রয়োজন অনুসারে কাজ করে আমি বিশ্বাস করি এটির সাথে মিলে গেলে প্রশ্নের পুনরায় রেকর্ডিং করা দরকার।
জেমস ওল্ফ

4
@ জেমস ওল্ফ This is not pretty printed JSONকেউ বলেনি এটি ছিল। ওপি চমত্কার সুইফট ডিকশনারি মুদ্রণের বিষয়ে জিজ্ঞাসা করেছিল - কয়েকজন অফ-টপিক উত্তরদাতা ছাড়া কেউ জেএসওএন সম্পর্কে কথা বলছে না। ওপি'র কুইসিটোন মোটেও জেএসওএন সম্পর্কে নয়।
এরিক আয়া

@ জেমস ওল্ফও দয়া করে প্রশ্নটি পরিবর্তন করবেন না। তা হবে ভাঙচুর। প্রশ্নটি যেমনটি পরিষ্কার তেমন স্পষ্ট, এবং এটি জেএসওএন সম্পর্কে নয়। কিছু উত্তর অন্যরকম কিছু বলার কারণে কোনও প্রশ্ন পরিবর্তন করবেন না। ধন্যবাদ
এরিক আয়া

112

'যেকোনওজেক্ট'-এ একটি অভিধান নিক্ষেপ করা আমার পক্ষে সহজ সমাধান ছিল:

let dictionary = ["a":"b",
                  "c":"d",
                  "e":"f"]
print("This is the console output: \(dictionary as AnyObject)")

এটি কনসোল আউটপুট

ডাম্প বিকল্পের চেয়ে এটি আমার পক্ষে পড়া সহজ, তবে নোট করুন এটি কী-মানগুলির মোট সংখ্যা দেয় না।


11
এটি ডাম্পের চেয়ে একটি উজ্জ্বল উপায় এবং উপায়ে
আবদেলহাদি

109

পো সমাধান

আপনারা যারা কনসোল-এ পালানোর ক্রম সহ অভিধানটি JSON হিসাবে দেখতে চান তাদের পক্ষে এটি করার একটি সহজ উপায়

(এলএলডিবি)p print(String(data: try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted), encoding: .utf8 )!)

হালনাগাদ

এই উত্তরটিও পরীক্ষা করে দেখুন উত্তর


4
যেহেতু একটি অভিব্যক্তি এবং কোনও বস্তু নয়, এটি 'পি' হওয়া উচিত এবং 'পো' নয়। তবে এই সমাধানের জন্য অনেক ধন্যবাদ! আমার জন্য দুর্দান্ত কাজ করে
আলেসান্দ্রো ফ্রান্সুচি

পছন্দ করুন কমান্ডটি একইভাবে একইভাবে কাজ করবে বলে মনে হচ্ছে।
নিকজওয়ালিন

এখন এটি করার উভয় পদ্ধতিই কাজ করছে। তবে "পো মুদ্রণ" করার আগে আমার পক্ষে কাজ হয়নি। (পো এর অর্থ মুদ্রণ অবজেক্ট .... যা আপনার পরে প্রিন্ট থাকলে এবং
কিছুটা ইমোহো

অসাধারণ! পুশনোটিকেশন
কারমেন_মিনিচ

4
পরীক্ষা করে দেখুন এই মন্তব্যটি একটি lldb ওরফে এই লিভারেজ তাই আপনি এটি সব টাইপ করতে হবে না!
আগ্রাসন

36

ফাংশনাল প্রোগ্রামিং ব্যবহার করে অন্য একটি উপায়

dictionary.forEach { print("\($0): \($1)") }

আউটপুট

B: bravo
A: alfa
F: foxtrot
C: charlie
D: delta
E: echo

4
এটি শীর্ষ উত্তর হওয়া উচিত। পুরোপুরি কাজ করে!
ইউরি ডাবভভ

বা "আরও বেশি কার্যকরী" হতে ... ডিকশনারি.ম্যাপ $ "($ 0): ($ 1)"}। प्रत्येक (মুদ্রণ) (জিভ-ইন-গাল মন্তব্য)
জন উইলিস

4
এটি ওপির [String: String]অভিধানের জন্য কাজ করে তবে অভিধানগুলির জন্য এটি দুর্দান্ত নয় [AnyHashable: Any], যেখানে কোনও মান যদি অভিধান হয় তবে আপনি সুইফটের অ-সুন্দর প্রিন্টিংয়ে ফিরে আসেন।
ক্রিস্টোফার পিক্সলে

আমি এই উত্তরটি চিহ্নিত করেছি - কারণ এখনও আমি এই বাক্য গঠনটি মনে করতে পারি না Nit
নিতিন আলাবুর

29

ডিবাগের উদ্দেশ্যে কেবল আমি অ্যারে বা অভিধানকে একটি সুন্দর মুদ্রিত জসনে রূপান্তর করব:

public extension Collection {

    /// Convert self to JSON String.
    /// Returns: the pretty printed JSON string or an empty string if any error occur.
    func json() -> String {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: self, options: [.prettyPrinted])
            return String(data: jsonData, encoding: .utf8) ?? "{}"
        } catch {
            print("json serialization error: \(error)")
            return "{}"
        }
    }
}

তারপরে:

print("\nHTTP request: \(URL)\nParams: \(params.json())\n")

কনসোলে ফলাফল:

HTTP request: https://example.com/get-data
Params: {
  "lon" : 10.8663676,
  "radius" : 111131.8046875,
  "lat" : 23.8063882,
  "index_start" : 0,
  "uid" : 1
}

এখানে ব্লগ কি?
নীতেশ

@ নীটেশ ব্লগ হ'ল ব্যাকট্রেস সহ একটি সহজ কাস্টম লগার যা আমি লিখেছিলাম, মুদ্রণ () সহ সম্পাদনা করেছি।
মার্কো এম

সর্বাধিক সুন্দর সমাধান।
ডেনিস কুতলুবায়েভ

যদি আপনি আপনার প্রতিটি প্রকল্পে কোডের স্নিপেট যুক্ত করা এড়াতে চান, আপনি সহজেই ডিবাগ টার্মিনালে জেসনটি গণনা করার জন্য একটি এলডিডিবি ওরফে দিয়ে সেই কোডটি উত্তোলন করতে পারেন (বিবরণ এখানে )।
আগ্রাসন

14

আমি এখানে সরবরাহ করা সত্যিকারের সুন্দর মুদ্রিত জেএসওএন এর প্রচুর উত্তর বিবেচনা করব না, আপনি যখন কোনও জেএসওএন যাচাইকারীর কাছে ফলাফলগুলি পাস করেন তখন ফলাফলটি অবৈধ (প্রায়শই ':' এর পরিবর্তে ':' এর পরিবর্তে কোডের কারণে হয়)।

এটি করার সবচেয়ে সহজ উপায়টি হ'ল JSON অবজেক্টটিকে ডেটে রূপান্তরিত করা সুন্দর প্রিন্টেড রাইটিং বিকল্পটি ব্যবহার করে তারপরে ফলস্বরূপ ডেটা ব্যবহার করে স্ট্রিং মুদ্রণ করা।

এখানে একটি উদাহরণ:

let jsonData = try! JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)

if let jsonString = String(data: jsonData, encoding: .utf8) {
    print(jsonString)
}

ফলাফল:

{
    "jsonData": [
        "Some String"
    ],
    "moreJSONData": "Another String",
    "evenMoreJSONData": {
        "A final String": "awd"
    }
}

সম্পাদনা : এটি উল্লেখ করা হয়েছে যে ওপি জেএসওনকে জিজ্ঞাসা করেনি, তবে আমি দেখতে পেয়েছি যে উত্তরগুলি কেবল কনসোলে ডেটা প্রিন্ট বা ডাম্প করার পরামর্শ দেয় সেগুলি খুব অল্প বিন্যাস (যদি থাকে) সরবরাহ করে এবং অতএব সুন্দর মুদ্রণ নয়।

আমি বিশ্বাস করি যে ওপি জেএসওনকে না জিজ্ঞাসা করলেও এটি একটি কার্যকর উত্তর কারণ এটি এক্সকোড / সুইফ্ট দ্বারা কনসোলের মধ্যে ছড়িয়ে থাকা ভয়াবহ বিন্যাসের চেয়ে ডেটার জন্য অনেক বেশি পঠনযোগ্য ফর্ম্যাট।


4
ধন্যবাদ, এর মাধ্যমে আমি ডিবাগিংয়ের মধ্য দিয়ে সুন্দর মুদ্রণ করতে সক্ষম e let jsonData = try! JSONSerialization.data(withJSONObject: response, options: .prettyPrinted);if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }
হয়েছি

4
এটা অসাধারণ! আপনি সহজেই ডিবাগ টার্মিনালে জেসন গণনা করতে একটি এলএলডিবি ওরফে দিয়ে এই কোডটি উত্তোলন করতে পারেন (বিবরণ এখানে )।
অগ্রণী

5

আপনি কেবল লুপের জন্য একটি ব্যবহার করতে পারেন এবং প্রতিটি পুনরাবৃত্তি মুদ্রণ করতে পারেন

for (key,value) in dictionary { 
    print("\(key) = \(value)")
}

এক্সটেনশনে আবেদন:

extension Dictionary where Key: CustomDebugStringConvertible, Value:CustomDebugStringConvertible {

    var prettyprint : String {
        for (key,value) in self {
            print("\(key) = \(value)")
        }

        return self.description
    }
}

বিকল্প অ্যাপ্লিকেশন:

extension Dictionary where Key: CustomDebugStringConvertible, Value:CustomDebugStringConvertible {

    func prettyPrint(){
        for (key,value) in self {
            print("\(key) = \(value)")
        }
    }
}

ব্যবহার:

dictionary.prettyprint //var prettyprint
dictionary.prettyPrint //func prettyPrint

আউটপুট (এক্সকোড 8 বিটা 2 খেলার মাঠে পরীক্ষিত):

A = alfa
B = bravo
C = charlie
D = delta
E = echo
F = foxtrot

4
আপনি কেবল কোনও ফাংশনের পরিবর্তে প্রশংসাপত্রটি একটি ভার তৈরি করার কোনও কারণ আছে?
হেডেন হলিগান

সত্যি বলতে, আমি এটি বিবেচনা করি না (আমি ভুল হতে পারি)। তবে আপনি যদি এটি ব্যবহার করেন তবে টাইপ করা কম But তবে একটি আকর্ষণীয় প্রশ্ন উত্থাপন করুন।
Asdrubal

4
যেহেতু একটি descriptionএবং debugDescriptionইতিমধ্যে রয়েছে, তাই ভেরাকে কল করা prettyDescriptionএবং ফর্ম্যাট করা স্ট্রিংটি ফিরে দেওয়া আরও উপযুক্ত ।
টোল্যান্ড

5

সুইসন ডিকশনারীটিকে জসন এবং পিছনে রূপান্তর করার পদ্ধতিটি সর্বাধিক নিকটস্থ। আমি ফেসবুকের ব্যবহার বাটালি যা হয়েছে pjson একটি সুইফট অভিধান প্রিন্ট করতে কমান্ড। যেমন:

(lldb) pjson dict as NSDictionary

এটি অভিধান-প্রিন্ট করা উচিত। ইতোমধ্যে যা প্রস্তাবিত হয়েছে তা করার এটি একটি পরিচ্ছন্ন উপায়। পিএস আপাতত আপনাকে এনএসডি অভিধান হিসাবে ডিকটি দিতে হবে কারণ উদ্দেশ্য-সি রানটাইম সুইফট অভিধানগুলি বুঝতে পারে না। এই সীমাবদ্ধতা থেকে মুক্তি পেতে আমি ইতিমধ্যে ছিনায় একটি জনসংযোগ উত্থাপন করেছি।

আপডেট: আমার PR গ্রহণ করা হয়েছে। এখন আপনি উপরে উল্লিখিত পিজেসনের পরিবর্তে পিএসজসন কমান্ড ব্যবহার করতে পারেন ।


4

জন্য সুইফট 3 (& দ্বারা উজ্জ্বল উত্তরে বিল্ডিং @Jalakoo ), নিম্নলিখিত করতে Dictionaryএক্সটেনশন:

extension Dictionary where Key: ExpressibleByStringLiteral, Value: Any {
    var prettyPrint: String {
        return String(describing: self as AnyObject)
    }
}

তারপরে যে কোনও শ্রেণিবিন্যাসের অভিধান মুদ্রণ করুন এটি ব্যবহার করে একটি সুন্দর উপায়ে (আরও ভাল dump()):

print(dictionary!.prettyPrint)

4

বিশদ

  • এক্সকোড 10.2.1 (10E1001), সুইফট 5

সমাধান

extension Dictionary {
    func format(options: JSONSerialization.WritingOptions) -> Any? {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: self, options: options)
            return try JSONSerialization.jsonObject(with: jsonData, options: [.allowFragments])
        } catch {
            print(error.localizedDescription)
            return nil
        }
    }
}

ব্যবহার

let dictionary: [String : Any] = [
                                    "id": 0,
                                    "bool": true,
                                    "int_array": [1,3,5],
                                    "dict_array": [
                                        ["id": 1, "text": "text1"],
                                        ["id": 1, "text": "text2"]
                                    ]
                                 ]
print("Regualr print:\n\(dictionary)\n")
guard let formatedDictionary = dictionary.format(options: [.prettyPrinted, .sortedKeys]) else { return }
print("Pretty printed:\n\(formatedDictionary)\n")

ফলাফল

এখানে চিত্র বর্ণনা লিখুন


3

আমার অন্যান্য উত্তরের ভিত্তিতে এখানে সামঞ্জস্য ।

এলএলডিবি ওরফে ব্যবহার করে প্রিট্টি প্রিন্ট জেএসএন দ্রবণ

কোনও কোডের দরকার নেই

  • একটি সুন্দর জসন ফর্ম্যাটিং (ইনডেন্টেশন, নিউলাইনস, ইত্যাদি) পেতে আপনি আপনার এলএলডিবি টার্মিনালে ( উত্স ) এই কমান্ডটি চালিয়ে একটি এলএলডিবি ওরফে সংজ্ঞা দিতে পারেন :
command regex pjson 's/(.+)/expr print(NSString(string: String(data: try! JSONSerialization.data(withJSONObject: %1, options: .prettyPrinted), encoding: .utf8)!))/'
  • আপনি যখনই এক্সকোড খোলেন তখনই আপনি সম্ভবত উপনামটির পুনরায় সংজ্ঞা দিতে চাইছেন না, সুতরাং উপন্যাস সংজ্ঞাটি এতে যুক্ত করতে নিম্নলিখিত কমান্ডটি চালান ~/.lldbinit:
echo "command regex pjson 's/(.+)/expr print(NSString(string: String(data: try! JSONSerialization.data(withJSONObject: %1, options: .prettyPrinted), encoding: .utf8)!))/'" >> ~/.lldbinit
  • এটি pjsonআপনার এলএলডিবি টার্মিনালটিতে এক্সকোডে ব্যবহার করতে পারেন এমন উপকরণটি তৈরি করবে :
pjson object

নিম্নলিখিত সুইফট অবজেক্টের জন্য আউটপুটগুলির তুলনা করা:

// Using Any? to demo optional & arbitrary Type
let dictionary: Any? = [
    "embedded": [
        "JustForTheSakeOfTheDemo": 42
    ],
    "A" : "alfa",
    "B" : "bravo",
    "C" : "charlie",
    "D" : "delta",
    "E" : "echo",
    "F" : "foxtrot"
]

✅ আউটপুট pjson dictionary

{
  "F" : "foxtrot",
  "D" : "delta",
  "embedded" : {
    "JustForTheSakeOfTheDemo" : 42
  },
  "E" : "echo",
  "A" : "alfa",
  "C" : "charlie",
  "B" : "bravo"
}

❌ আউটপুট p dictionary

(Any?) $R0 = 7 key/value pairs {
  [0] = {
    key = "F"
    value = "foxtrot"
  }
  [1] = {
    key = "D"
    value = "delta"
  }
  [2] = {
    key = "embedded"
    value = 1 key/value pair {
      [0] = (key = "JustForTheSakeOfTheDemo", value = 42)
    }
  }
  [3] = {
    key = "E"
    value = "echo"
  }
  [4] = {
    key = "A"
    value = "alfa"
  }
  [5] = {
    key = "C"
    value = "charlie"
  }
  [6] = {
    key = "B"
    value = "bravo"
  }
}

❌ আউটপুট p (dictionary as! NSDictionary)

(NSDictionary) $R18 = 0x0000000281e89710 {
  ObjectiveC.NSObject = {
    base__SwiftNativeNSDictionaryBase@0 = {
      baseNSDictionary@0 = {
        NSObject = {
          isa = Swift._SwiftDeferredNSDictionary<Swift.String, Any> with unmangled suffix "$"
        }
      }
    }
  }
}

❌ আউটপুট po dictionary

Optional<Any>
  ▿ some : 7 elements
    ▿ 0 : 2 elements
      - key : "F"
      - value : "foxtrot"1 : 2 elements
      - key : "D"
      - value : "delta"2 : 2 elements
      - key : "embedded"
      ▿ value : 1 element
        ▿ 0 : 2 elements
          - key : "JustForTheSakeOfTheDemo"
          - value : 423 : 2 elements
      - key : "E"
      - value : "echo"4 : 2 elements
      - key : "A"
      - value : "alfa"5 : 2 elements
      - key : "C"
      - value : "charlie"6 : 2 elements
      - key : "B"
      - value : "bravo"

❌ আউটপুট po print(dictionary)

Optional(["F": "foxtrot", "D": "delta", "embedded": ["JustForTheSakeOfTheDemo": 42], "E": "echo", "A": "alfa", "C": "charlie", "B": "bravo"])


1

ডিবাগিংয়ের সময়, কনসোলটিতে কোডেবল প্রোটোকল অনুসারে স্ট্রাক্ট আউটপুট করুন
json ফর্ম্যাট ব্যবহার করুন।

extension Encodable {
    var jsonData: Data? {
        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        return try? encoder.encode(self)
    }
}

extension Encodable where Self: CustomDebugStringConvertible {
    var debugDescription: String {
         if let data = self.jsonData,
             let string = String(data: data, encoding: .utf8) {
             return string
         }
         return "can not convert to json string"
     }
}

strcut কাস্টমডিবুগস্ট্রিংকনভার্টেবল

struct Test: Codable, CustomDebugStringConvertible {
    let a: String
    let b: Int
}

let t = Test(a: "test string", b: 30)

ডিবাগ প্রিন্ট স্ট্রাক্ট

(lldb) p print(t)
{
  "a" : "test string",
  "b" : 30
}

1

ডেটা অবজেক্ট থেকে সুন্দর মুদ্রণ:

let jsonObj = try JSONSerialization.jsonObject(with: data, options: [])
            let jsonData = try JSONSerialization.data(withJSONObject: jsonObj, options: [.prettyPrinted])
            print(String(data: jsonData, encoding: .utf8)!)

4
এটা অসাধারণ! আপনি সহজেই ডিবাগ টার্মিনালে জেসন গণনা করতে একটি এলএলডিবি ওরফে দিয়ে এই কোডটি উত্তোলন করতে পারেন (বিবরণ এখানে )।
অগ্রণী

0

কেমন:

import Foundation

extension Dictionary {
    var myDesc: String {
        get {
            var v = ""
            for (key, value) in self {
                v += ("\(key) = \(value)\n")
            }
            return v
        }
    }
}


// Then, later, for any dictionary:
print(dictionary.myDesc)

0
extension String {

    var conslePrintString: String {

        guard let data = "\""
            .appending(
                replacingOccurrences(of: "\\u", with: "\\U")
                    .replacingOccurrences(of: "\"", with: "\\\"")
            )
            .appending("\"")
            .data(using: .utf8) else {

            return self
        }

        guard let propertyList = try? PropertyListSerialization.propertyList(from: data,
                                                                             options: [],
                                                                             format: nil) else {
            return self
        }

        guard let string = propertyList as? String else {
            return self
        }

        return string.replacingOccurrences(of: "\\r\\n", with: "\n")
    }
}

let code in extension String and it works fine 

let string = "\(jsonDictionary)".conslePrintString
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.