Coredata [INT64]可转换,转换为Swift之外的可用阵列

发布于 2025-02-01 00:11:41 字数 95 浏览 1 评论 0原文

我有一个具有各种值的Coredata实体。有时我想将值导出到JSON与另一个应用程序共享。我的转换[INT64]变成了数据。 我该如何将其转换回?例如在JavaScript中?

I have a CoreData entity with various values. Sometimes I want to export the values to Json to share with another app. My Transformed [Int64] turns into data.
How can I transform it back? For instance in javascript?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寒江雪… 2025-02-08 00:11:41

我已经通过直接从应用程序中写入JSON来解决此问题。然后阵列完好无损。

let dir = FileManager.default.urls(for: .documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask).first!
    let fileurl =  dir.appendingPathComponent("export.json")
                
                var array: [String] = ["[\n"]
                for value in values
                  if let value = (value.toJSON()) {
                  array.append(value + ",\n")
                  }
                }
                array.append("]")

                let data = array.joined().data(using: .utf8, allowLossyConversion: false)!
                

                if FileManager.default.fileExists(atPath: fileurl.path) {
                    if let fileHandle = try? FileHandle(forUpdating: fileurl) {
                        fileHandle.seekToEndOfFile()
                        fileHandle.write(data)
                        fileHandle.closeFile()
                    }
                } else {
                    try! data.write(to: fileurl, options: Data.WritingOptions.atomic)
                }

使用.tojson()我在这里来自@mike_notguilty。

extension NSManagedObject {
  func toJSON() -> String? {
    let keys = Array(self.entity.attributesByName.keys)
    let dict = self.dictionaryWithValues(forKeys: keys)
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
        let reqJSONStr = String(data: jsonData, encoding: .utf8)
        return reqJSONStr
    }
    catch{}
    return nil
  }
}

编辑:忘记,上面的函数有错误,因为最后一个值在最后也会导致损坏的JSON。我使用这样的东西:

for i in values.indices {
     if i != values.count - 1 {
        if let value = (values[i].toJSON()) {
            array.append(value + ",\n")
            }
      } else {
        if let value = (values[i].toJSON()) {
            array.append(value + "\n")
            }
      }
}

I've solved this by writing an export to json directly from the app. Then the array is intact.

let dir = FileManager.default.urls(for: .documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask).first!
    let fileurl =  dir.appendingPathComponent("export.json")
                
                var array: [String] = ["[\n"]
                for value in values
                  if let value = (value.toJSON()) {
                  array.append(value + ",\n")
                  }
                }
                array.append("]")

                let data = array.joined().data(using: .utf8, allowLossyConversion: false)!
                

                if FileManager.default.fileExists(atPath: fileurl.path) {
                    if let fileHandle = try? FileHandle(forUpdating: fileurl) {
                        fileHandle.seekToEndOfFile()
                        fileHandle.write(data)
                        fileHandle.closeFile()
                    }
                } else {
                    try! data.write(to: fileurl, options: Data.WritingOptions.atomic)
                }

Using .toJSON() which I got here CoreData object to JSON in Swift 3 from @Mike_NotGuilty.

extension NSManagedObject {
  func toJSON() -> String? {
    let keys = Array(self.entity.attributesByName.keys)
    let dict = self.dictionaryWithValues(forKeys: keys)
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
        let reqJSONStr = String(data: jsonData, encoding: .utf8)
        return reqJSONStr
    }
    catch{}
    return nil
  }
}

Edit: Forgot, above function has an error because the last value also gets a , at the end, leading to a corrupt JSON. I use something like this:

for i in values.indices {
     if i != values.count - 1 {
        if let value = (values[i].toJSON()) {
            array.append(value + ",\n")
            }
      } else {
        if let value = (values[i].toJSON()) {
            array.append(value + "\n")
            }
      }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文