Hi all,
Here I want to encode OrderedDictionary to JSON file,
I use the JSONEncoder below:
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes]
and I declare variables qwe, asd and zxc:
var qwe = OrderedDictionary<String, Int>()
qwe["bbb"] = 12
qwe["ccc"] = 13
qwe["ddd"] = 14
qwe["bbc"] = 15
var asd = Dictionary<String, Int>()
asd["bbb"] = 1
asd["ccc"] = 3
asd["ddd"] = 4
asd["bbc"] = 5
var zxc: KeyValuePairs<String, String> {
return [
"zz": "zz",
"aa": "aa",
"bb": "bb",
"cc": "cc",
"bc": "bc",
]
}
After I do try encoder.encode(qwe).write(to: path ,options: .atomic)
encoder.encode(asd).write(to: path ,options: .atomic)
encoder.encode(zxc).write(to: path ,options: .atomic)
the output JSON file format of OrderedDictionary isn't what I expected.
The output JSON of OrderDictionary is like this:
[
"bbb",
12,
"ccc",
13,
"ddd",
14,
"bbc",
15
]
On the other hand, the output JSON of Dictionary and KeyValuePairs are normal, just with different order:
Dictonary:
{
"ccc" : 3,
"bbb" : 1,
"bbc" : 5,
"ddd" : 4
}
KeyValuePairs:
{
"cc" : "cc",
"aa" : "aa",
"zz" : "zz",
"bb" : "bb",
"bc" : "bc"
}
I also Log these objects after I declare them, the Log show their structure are similar:
qwe -> ["bbb": 12, "ccc": 13, "ddd": 14, "bbc": 15]
asd -> ["ccc": 3, "bbb": 1, "bbc": 5, "ddd": 4]
zxc -> ["zz": "zz", "aa": A"aa", "bb": "bb", "cc": "cc", "bc": "bc"]
I thought the OrderedDictionary is similar to Dictionary, but does anyone know why the output of OrderedDictionary is not like this:
{"bbb": 12, "ccc": 13, "ddd": 14, "bbc": 15}
Or is there any other way I can customize the order of keys in my encoded JSON file?
Thank you so much!