json - 如何将 json 字符串传递给对象?
问题描述
我的问题是下一个,我有一个这个 json
{
"nombre" : "userProfile.user.name!",
"apaterno" : 20,
"amaterno" : true,
"email" : 100,
"start_screen" : {
"info" : true,
"title" : false,
"image" : 20,
"success_btn" : "hola",
"close_btn" : true
}
}
我想将此 json 传递给我的结构,我的结构是:
struct person: Decodable
{
var email : Int
var nombre : String
var apaterno : Int
var amaterno: Bool
struct start_screen {
var title: Bool
var info: Bool
var image: Int
var success_btn: String
var close_btn: Bool
}
}
在接下来的几行中,我将 json 放入了我的结构中,但 start_screen 结构无法获取数据。
let jsonData = json.data(using: .utf8)!
let decoder = JSONDecoder()
let myStruct = try! decoder.decode(person.self, from: jsonData)
当我访问 myStruct.email 时,我得到 100,没问题,但我无法加载 start_screen 数据,我该怎么做?
解决方案
首先,您需要为person
for添加一个变量start_screen
。
var start_screen: start_screen
然后你需要做start_screen
Decodable
struct start_screen: Decodable
这应该是使其工作的最小更改量。
此外,您可能希望将您的类型大写。start_screen: start_screen
看起来真的很混乱。您还可以创建变量和类型名称camelCase
,并为您JSONDecoder
转换为/从snake_case
。这也是swift中的命名约定。它看起来像这样
struct Person: Decodable {
var email: Int
var nombre: String
var apaterno: Int
var amaterno: Bool
var startScreen: StartScreen
struct StartScreen: Decodable {
var title: Bool
var info: Bool
var image: Int
var successBtn: String
var closeBtn: Bool
}
}
let jsonData = json.data(using: .utf8)!
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let person = try! decoder.decode(Person.self, from: jsonData)
print(person)
推荐阅读
- algorithm - 在快速排序中选择数据透视
- html - 在另一个页面上使用设计登录
- azure-active-directory - New-AzAks powershell cmdlet 无法指定与 AAD 集成所需的 server-app-id 和 server-app-secret
- javascript - postcss 正在处理 /css/app.css 并在 import vue2-daterange-picker 后抛出 CssSyntaxError
- macos - 在我添加标志之前可以访问 npm 包的二进制文件
- android - 如何使用 Jetpack Compose 创建动画?
- image-processing - 有没有办法检查 XYZ 三元组是否是有效颜色?
- azure-ad-b2c - AD B2C 自定义策略中的单个编排步骤中的自定义电子邮件验证
- laravel - 错误调用 bool 上的成员函数 getRealPath()
- python - 如何在 Python 中将测量的发射线数据与高斯函数拟合?(原子光谱)