如何在 Vapor 3 中将字典的元素分配给 JSON 对象?

2024-01-03

在 Vapor 1.5 中,我曾经将现有字典的元素分配给 JSON 对象,如下所示。我该如何做这个 Vapor 3?

 func makeCustomJSON(jsonFromReading: JSON, clientData: DataFromClient) throws -> JSON{

    var dictionaryOfStrings = [String:String]()

    dictionaryOfStrings["ChangesMadeBy"] = "Cleaner"
    dictionaryOfStrings["BookingNumber"] = clientData.bookingNumber
    dictionaryOfStrings["Claimed"] = "false"
     //some 50 properties more...


    //object read from /Users
    var finalJsonObj = jsonFromReading

    //assign the values of dictionaryOfStrings to finalJsonObj
    for i in dictionaryOfStrings {
        let key  = i.key
        let value = i.value
        finalJsonObj[key] = try JSON(node:value)
    }

    //make json from object under CancelledBy and assign it to arrayOfTimeStampObjs
    var arrayOfTimeStampObjs = try jsonFromReading["CancelledBy"]?.makeJSON() ?? JSON(node:[String:Node]())


    //assign dictionaryOfStrings to current time stamp when booking is claimed
    arrayOfTimeStampObjs[clientData.timeStampBookingCancelledByCleaner] = try JSON(node:dictionaryOfStrings)
    finalJsonObj["CancelledBy"] = arrayOfTimeStampObjs

    return finalJsonObj

} //end of makeCustomJSON

这基本上就是 swift 中的 JSON 序列化。将 JSON 对象解码为字典,然后修改字典并创建新的 JSON。

router.get("test") { req -> String in

    let jsonDic = ["name":"Alan"]
    let data = try JSONSerialization.data(withJSONObject: jsonDic, options: .prettyPrinted)
    let jsonString = String(data: data, encoding: .utf8)
    return jsonString ?? "FAILED"
}

router.get("test2") { req -> String in
    do {
        // Loading existing JSON
        guard let url = URL(string: "http://localhost:8080/test") else {
            return "Invalid URL"
        }

        let jsonData = try Data(contentsOf: url)
        guard var jsonDic = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as? [String:String] else {
            return "JSONSerialization Failed"
        }

        // Apply Changes
        jsonDic["name"] = "John"

        // Creating new JSON object
        let data = try JSONSerialization.data(withJSONObject: jsonDic, options: .prettyPrinted)
        let jsonString = String(data: data, encoding: .utf8)
        return jsonString ?? "FAILED"
    }catch{
        return "ERROR"
    }
}

我强烈建议为您的数据类型创建结构或类。使用铸造会更安全codable协议并且更容易在 JSON 和对象类型之间转换,因为contentVapor 版本 3 中的协议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Vapor 3 中将字典的元素分配给 JSON 对象? 的相关文章

随机推荐

  • 如何使用 Python 将 HTML 电子邮件另存为 Outlook 文件?

    有人在 Outlook 中创建了一个不错的电子邮件模板并将其发送给我以实现自动化 我打开了 HTML 格式的电子邮件 并使用该 HTML 重新创建了准确的电子邮件图像 格式等 我可以很好地发送这封电子邮件 但随后有人问我是否可以将所有电子邮
  • h:commandLink 的 oncomplete 属性未调用

    我们正在从 JSF 1 2 迁移到 JSF 2 2 6 以及 RichFaces 4 5 2 面临的问题oncomplete没有被叫到 期间的JS函数onclick被调用 但是 JS 在oncomplete没有被调用 这是如何引起的以及如何
  • 后端基于休息的服务

    我们建立了一个超过 3000 万用户的在线社区 该社区的后端有 RESTful 服务 前端也使用这些服务 我担心的是 与Java的二进制序列化协议 取决于语言 相比 使用REST作为内部数据传输协议是否可以 或者它会显着降低性能 可以使用哪
  • WordPress 网站显示内联 css 代码

    我正在一个网站上工作http kaniamea com turtle http kaniamea com turtle 如果您查看源代码 您将看到以下内容 这是内联代码 它随主题一起提供 有没有办法在子文件夹中的单独样式表中组织此代码 还有
  • 数据库连接自动重新连接

    我在 Tomcat 中有一个 DBCP 连接池 问题是 当连接短暂丢失时 应用程序就会中断 因为 DBCP 不会在稍后有连接时尝试再次重新连接 我可以让 DBCP 自动重新连接吗 有两种方法可以 解决 这个问题 尽管两者都存在一些问题 您可
  • 从 SQL Server 中的行创建列

    我有一个 SQL 查询 它提供以下格式的数据 Total Hours Year 100 00 2012 200 00 2012 300 00 2012 75 00 2011 150 00 2011 50 00 2010 125 00 201
  • MPMediaItemArtwork 返回错误尺寸的图稿

    我发现 MPMediaItemArtwork 存在一个一致的问题 即它返回的图稿尺寸与我请求的尺寸不同 我正在使用的代码如下 MPMediaItem representativeItem self representativeItems o
  • Android TabHost.addTab -> 空指针异常

    这是我的代码 public class Main extends Activity Override public void onCreate Bundle savedInstanceState TabHost tabHost new Ta
  • 将 localStorage 值加一

    我正在开发我们的应用程序的尝试登录功能 他们失败了三次 就把他们彻底踢出了局 为了记录他们尝试的次数 我认为我会使用 localStorage 因为我可以轻松地操作它 但是 当他们无法验证自己的身份时 我无法增加该值 在顶部 我设置 loc
  • 如何从 Java 8 lambda/流内部抛出已检查的异常?

    如何从 Java 8 lambda 内部抛出已检查的异常 例如在流中使用 换句话说 我想让代码像这样编译 public List
  • NSOperationQueue 在 IOS 中崩溃

    我有一个项目 它使用以下方式在后台下载图像NSOperationQueue 到目前为止 它可以在 iOS 4 3 的设备上运行 但是 如果我使用基础 sdk 4 3 或 5 构建应用程序并在使用 IOS5 的设备上运行该应用程序 则该应用程
  • SparkSQL 和 Java 中的 DataFrame 上的爆炸

    有没有简单的方法如何使用explodeSpark SQL 中的数组列DataFrame 在Scala中相对简单 但在Java中这个功能似乎不可用 如javadoc中提到的 一个选项是使用SQLContext sql and explode查
  • Rails Arel 通过连接表上的 where 条件进行连接

    我正在尝试将以下 Rails where 子句转换为使用 Arel 主要是为了利用orArel 提供的方法 后模型 class Post belongs to user end 用户模型 class User has many posts
  • Delphi 7 - 如何使用标题从列表视图中删除项目

    我正在尝试删除基于标题的列表视图项目 但我找不到解决方案 删除项目的唯一方法是使用索引 listview1 Items Delete 0 谁能帮我通过标题删除项目 您可以使用类似的东西 它尝试找到ListItem与标题Item 2 如果找到
  • Python:如何根据网络节点的度数为其着色?

    我有一个无标度网络10000节点 但边缘的纹理和节点的数量使其过于复杂而难以理解 我希望能够直观地找到连接程度最高的节点 我如何根据节点的 k 度对节点进行着色 具体来说 我想根据预先指定的范围为它们着色 例如 绿色如果1
  • Windows 上的 System.err 在哪里?

    我有一个基于 Java GUI 的应用程序 它将一些诊断消息写入 System out 和 System err 在 Windows 上运行时这些消息输出在哪里 例如 在 Mac OS X 上 它们被打印到系统控制台日志中 Edit 我应该
  • pyqt QtGraphicsView 未在循环内更新

    我有一个基于 PyQt 构建的 GUI 程序 GUI 有一个 QtGraphicsView 小部件 其中有一个 GraphicsScene 其中有一个要显示和更新的 Pixmap 项目 例如 我使用以下行来执行此操作 view scene
  • 使用 scanf 的返回值验证输入不起作用

    我正在做一个井字棋期末项目 我要求用户打印他想要填写的框号 然后我使用整数err来获取返回值scanf 在这种情况下 scanf 应该返回它已读取的整数数量 而我要求读取一个整数 因此只要 err 1 它就应该进入 while 循环 然而
  • C# 开发工作的项目结构 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 What directory solution project structure do you find to be the most man
  • 如何在 Vapor 3 中将字典的元素分配给 JSON 对象?

    在 Vapor 1 5 中 我曾经将现有字典的元素分配给 JSON 对象 如下所示 我该如何做这个 Vapor 3 func makeCustomJSON jsonFromReading JSON clientData DataFromCl