iOS字典转成JSON换行符问题

2023-10-30

问题

使用系统框架将字典转成压缩转义后的JSON字符串,发现字符串中带有多个换行符。

系统转JSON的方法如下:

let json = try JSONSerialization.jsonObject(with: validData, options: options)

例:Alamofire框架里面字典转JSON字符串的方法

      public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var urlRequest = try urlRequest.asURLRequest()

        guard let parameters = parameters else { return urlRequest }

        do {
            let data = try JSONSerialization.data(withJSONObject: parameters, options: options)

            if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
                urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
            }

            urlRequest.httpBody = data
        } catch {
            throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
        }

        return urlRequest
    }

字典在控制台打出来如下:

["Data": {
    ArrayOfAdds =     (
    );
    ArrayOfDeletes =     (
    );
    ArrayOfUpdates =     (
                {
            ItemCode = x9336;
            LineNum = 5;
            Quantity = "2.0";
            WarehouseCode = 235;
        },
                {
            ItemCode = x9336;
            LineNum = 6;
            Quantity = "5.0";
            WarehouseCode = 235;
        }
    );
    DocEntry = 26774;
    Finalize = 0;
    Type = PurchaseOrder;
}]

POST请求将这个字典传到Alamofire框架后,在let data = try JSONSerialization.data(withJSONObject: parameters, options: options) 下一行断点,输出序列换之后的JSON字符串,结果控制台会输入带空格和换行的JSON字符串

po String(data: data, encoding: String.Encoding.utf8)Optional<String>
  - some : " {  "Data" : {    "Finalize" : false,    "ArrayOfUpdates" : [      {        "WarehouseCode" : "235",        "Quantity" : "5.0",        "ItemCode" : "x9336"      }, 
  -      {        "WarehouseCode" : "235",        "Quantity" : "2.0",        "ItemCode" : 
  - x9336"      }    ],    "Type" : "PurchaseOrder",    "DocEntry" : 26774,    "ArrayOfDeletes" : [    ],    "ArrayOfAdds" : [    ]  }}"

原因

导致这样的原因是在调用request方法时候,设置的参数encode的类型是JSONEncoding.prettyPrinted,如果选择这个,Alamofire框架里面在进行字典转JSON的时候会设置 let data = try JSONSerialization.data(withJSONObject: parameters, options: options) 处options的值为1,就会出现转成JSON之后有空格和换行符的情况。

task.request = sessionManager?.request(url!, method: method, parameters: paramters, encoding: JSONEncoding.default, headers: self.headers).responseJSON { response in
    task.handleResponse(response: response)
}

可以在如下代码中断点调试看看

    public init(options: JSONSerialization.WritingOptions = []) {
        self.options = options
    }

根本原因还是在使用序列化JSON的方法的时候传不同的值,会有不同的情况。

JSONSerialization.data(withJSONObject: parameters, options: options)

如果option传0的话,系统默认会取消所有的换行符和空格,如果传1的话默认不做处理。在使用Alamofire发送请求时,需要注意encoding字段的设置,这会影响到框架里面序列化options字段的值。

解决

JSONSerialization.data(withJSONObject: parameters, options: options) options参数传0即可。

如果使用Alamofire进行传参数发现的这个问题的话,将encoding字段的值改成JSONEncoding.default即可。

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

iOS字典转成JSON换行符问题 的相关文章

  • SuperPoint 论文详解

    SuperPoint 该论文是 magic leap 公司在18年的一篇工作 而且提供了代码 基于 pytorch 的 不过遗憾的是训练代码和相应的渲染的训练数据没提供 主要思路 本文提出了一个自监督的方式去训练网络来提取特征点以及计算描述
  • 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题

    LoadRunner 解决LR11无法录制Chrome浏览器脚本问题 LoadRunner录制脚本时 遇到高版本的IE FireFox 或者Chrome浏览器 会出现无法录制脚本的问题 下面就来讲一下如何利用LR自带的wplus init
  • tflearn anaconda 安装过程记录

    准备工作 gcc升级为4 8 2glibc升级为2 18 opt xxx xxx components ficlient bigdata env 里加入 export LD LIBRARY PATH usr local lib usr lo

随机推荐

  • SpringBoot调取OpenAi接口实现ChatGpt功能

    很高兴和大家分享我实现的一个小项目 利用 Spring Boot 实现了一个 ChatGpt 对话系统 在本文中 我将详细介绍这个项目的实现步骤 以及代码实现 什么是 ChatGpt ChatGpt 是一种基于 GPT 技术的对话系统 能够
  • 剑指offer45 把数组排成最小的数

    目录 题目链接 解法1 调用sort 解法2 冒泡排序的扩展 题目链接 链接 其实这道题 大概看完就知道是一个排序的问题 无非就是数组中的元素以一个合适的位置排好序 这样从头加到尾 组成的整体数字最小 题目中也暗示你排序问题了 个人捉摸了一
  • linux系统启动过程(方便记忆步骤&详细步骤)

    linux系统的启动过程 大致可以分为五个阶段 内核的引导 运行init 系统初始化 建立终端 用户登录系统 大致步骤 1 内核的引导 操作系统 gt boot 2 运行init 操作系统 gt boot gt init进程 配置文件 et
  • Wix toolset打包工具介绍

    Wix Toolset工具目前是windows平台应用打包比较好用的工具 最大的两个优点是功能全面和免费软件 下面来介绍一下这个软件 Wix Toolset官网 1 Wix的核心是一组build工具 Wix来生成windows安装包的理念跟
  • opencv学习笔记之十五——最小外接矩形(RotatedRect返回角度angle问题)

    最近在看一个车牌识别开源项目时 对其中RotatedRect的角度属性理解得不清楚 也查找了大量博客 得出了基本结论 最后通过实验进一步进行了验证 RotatedRect该类表示平面上的旋转矩形 有三个属性 矩形中心点 质心 边长 长和宽
  • 数据结构-1

    基本概念 数据 data 计算机中指的是能输入到计算机中并被计算机程序处理的符号的总称 比如 图像 声音等都可以在进行编码后被称为数据 再在计算机中进行处理 数据元素 data element 数据的基本单位 数据元素可由多个数据项 dat
  • Takeown、Cacls、Icacls-文件、文件夹夺权用法

    常用示例如下 takeown f 文件名 获取该文件的所属权 takeown f r d n 文件夹 获取整个文件夹及其下面子目录文件的所属权 takeown f a r d y 强制将当前目录下的所有文件及文件夹 子文件夹下的所有者更改为
  • 算法-DS证据理论

    适用领域 信息融合 条件 证据独立 特点 1 满足比贝叶斯理论更弱的条件 不必满足概率可加性 2 具有直接表达 不确定 和 不知道 的能力 这些信息保存在mass函数中 并在证据合成过程中保留了这些信息 3 证据理论不但允许人们将信度赋予假
  • 解决插入word文档中的图片变得不清晰问题

    打开文件 找到选项 打开高级 找到不压缩图片并勾选 确定并退出
  • saltstack安装

    ubuntu install 1 ppa install sudo add apt repository ppa saltstack salt sudo apt get update sudo apt get install salt ma
  • 字符串替换C++实现

    题目 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 思路 给定了字符串 和字符串最大长度 替换空格为 20 找出所有空格 计算新的长
  • vs 自定义 格式化代码快捷键

    vs 自定义 格式化代码快捷键 工具 选项 环境 键盘 编辑 设置选定内容的格式 全局 输入自己想要的快捷键 分配 确定
  • sysdba不能远程登录

    sysdba不能远程登录这个也是一个很常见的问题了 碰到这样的问题我们该如何解决呢 我们用sysdba登录的时候 用来管理我们的数据库实例 特别是有时候 服务器不再本台机器 这个就更是有必要了 当我们用sqlplus as sysdba 是
  • 怎么利用数据库做分布式共享锁

    一 适用环境 1 数据库集群模式 1主多从 2 单机数据库 3 数据库必须提供行级锁功能 二 原理 cas算法 代码 更新当前值为new updateCurrentValue id new old old 通过id 查到的值 new 期望的
  • 变量交换的四种方式

    可以使用以下方法对两个变量进行交换 方法一 定义一个中间量 define CRT SECURE NO WARNINGS include
  • VUE 项目文件夹上传下载解决方案

    原理 js将大文件分成多分 全部上传成功之后 调用合并接口合成文件 如果传输中断 下次上传的时候过滤掉已经上传成功的分片 将剩余的分片上传 成功之后合并文件 前置条件 获取uoloadId接口 用于标记分片 分片上传接口 合成文件接口 后端
  • matplotlib画图间隔范围等设置

    import matplotlib pyplot as plt from matplotlib pyplot import MultipleLocator 从pyplot导入MultipleLocator类 这个类用于设置刻度间隔 x va
  • Burpsuite教程(一)Burpsuite 火狐谷歌浏览器抓包教程

    文章目录 Web抓包 火狐抓包 谷歌抓包 小技巧 结束 Web抓包 火狐抓包 环境需求 火狐浏览器 代理插件 1 打开测试工具BurpSuite 默认工具拦截功能是开启的 颜色较深 我们点击取消拦截 下图取消拦截状态 数据包可以自由通过 2
  • vue3.0中全局注册组件版本1-官方

    前言 在对vue3 0的使用和学习中 发现了很多和以前不一样的方法 这里聊一聊vue3 0中给我们提供的全局的注册组件方法 官方文档 入口 目录 具体方法介绍 1 前提 返回一个提供应用上下文的应用实例 应用实例挂载的整个组件树共享同一个上
  • iOS字典转成JSON换行符问题

    问题 使用系统框架将字典转成压缩转义后的JSON字符串 发现字符串中带有多个换行符 系统转JSON的方法如下 let json try JSONSerialization jsonObject with validData options