Я сериализую файл json, чьи пары ключ-значение не следует перетасовывать при записи в новый файл после редактирования. Даже если я не редактирую, он по-прежнему перемещает пары.Как читать-писать json-файл, не нарушая последовательности его пар ключ-значение в iOS?
Мне просто нужна такая же последовательность пар ключ-значение в новом файле (записанный файл), как и в предыдущем файле, который я читал.
Вот пример JSON
[
{
"StudentName":"Amit",
"StudentId":"1"
},
{
"StudentName":"Lalit",
"StudentId":"2"
},
{
"StudentName":"Ram",
"StudentId":"3"
},
{
"StudentName":"Shyam",
"StudentId":"4"
}
]
Что я получаю после написания JSONObject в новый файл является:
[
{
"StudentName":"Lalit",
"StudentId":"2"
},
{
"StudentName":"Ram",
"StudentId":"3"
},
{
"StudentName":"Shyam",
"StudentId":"4"
},
{
"StudentName":"Amit",
"StudentId":"1"
}
]
У меня есть два файла кода, так как я работаю в командной строке инструмент.
1) main.swift
import Foundation
var behavioralJsonObject : AnyObject
var newBehavioralDataObject: NSData = NSData()
let fileManager = NSFileManager.defaultManager()
var path = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first
var stringPath: String = (path?.path)!
var behavioralFilePath: String = stringPath.stringByAppendingString("/BehavioralFile.json")
var newBehavioralFilePath : String = stringPath.stringByAppendingString("/BehavioralFileNew.json")
behavioralJsonObject = MyJsonParser().jsonObject(withFilePath: behavioralFilePath)
print(behavioralJsonObject.description)
newBehavioralDataObject = try NSJSONSerialization.dataWithJSONObject(behavioralJsonObject, options: .PrettyPrinted)
newBehavioralDataObject.writeToFile(newBehavioralFilePath, atomically: true)
2) MyJsonParser.swift
import Foundation
class MyJsonParser: NSObject {
func jsonObject(withFilePath path:String)-> AnyObject{
let dataObject = NSData.init(contentsOfFile: path)
var jsonObject: AnyObject = []
do{
jsonObject = try NSJSONSerialization.JSONObjectWithData(dataObject!, options: .AllowFragments)
}
catch{
print("Serialization error : \(error)")
}
return jsonObject;
}
}
ли кто-нибудь уже сталкивался с этой проблемой или имеет решение для этого?
Обновите свой вопрос соответствующим кодом. – rmaddy
Я добавил код. –
Что делает «print (jsonObject.dynamicType» в методе «jsonObject (withFilePath path: String)»? Просто убедитесь, что вы читаете в массиве, а не в словаре. – TofuBeer