在本文中,我们将带你了解在Swift中解码JSONWeb令牌在这篇文章中,我们将为您详细介绍在Swift中解码JSONWeb令牌的方方面面,并解答swiftjson解析常见的疑惑,同时我们还将给您一些
在本文中,我们将带你了解在Swift中解码JSON Web令牌在这篇文章中,我们将为您详细介绍在Swift中解码JSON Web令牌的方方面面,并解答swiftjson解析常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的c#-解码JSON Web令牌(Xamarin.Android)、ios – 在swift 2中解析json对象、ios – 在Swift中解码JSON Web令牌、ios – 如何在swift中解析Firebase FDatasnapshot json数据。
本文目录一览:- 在Swift中解码JSON Web令牌(swiftjson解析)
- c#-解码JSON Web令牌(Xamarin.Android)
- ios – 在swift 2中解析json对象
- ios – 在Swift中解码JSON Web令牌
- ios – 如何在swift中解析Firebase FDatasnapshot json数据
在Swift中解码JSON Web令牌(swiftjson解析)
试图在Swift中解码JWT有效负载并遇到困难
static func decodePayload(tokenstr: String) { //splitting JWT to extract payload let arr = split(tokenstr) {$0 == "."} //base64 encoded string i want to decode let base64String = arr[1] as String println(base64String) //eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0 //attempting to convert base64 string to nsdata let nsdata: NSData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)) //decoding fails because nsdata unwraps as nil let base64Decoded: NSString = NSString(data: nsdata!, encoding: NSUTF8StringEncoding)!}
答案1
小编典典eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0
不是有效的Base64编码字符串,因为它的长度不是4的倍数。某些Base64解码器可以容忍此错误,但NSData
方法不能。
因此,这实际上是在服务器端创建Base64编码的字符串时出现的错误。如有必要,您可以通过添加所需的=
字符填充来在应用程序中对其进行修复(已为Swift
2更新了代码):
var base64String = arr[1] as Stringif base64String.characters.count % 4 != 0 { let padlen = 4 - base64String.characters.count % 4 base64String += String(count: padlen, repeatedValue: Character("="))}
现在解码可以按预期进行:
if let data = NSData(base64EncodedString: base64String, options: []), let str = String(data: data, encoding: NSUTF8StringEncoding) { print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"}}
斯威夫特4:
var base64String = "eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0"if base64String.count % 4 != 0 { let padlen = 4 - base64String.count % 4 base64String.append(contentsOf: repeatElement("=", count: padlen))}if let data = Data(base64Encoded: base64String) , let str = String(data: data, encoding: .utf8) { print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"}}
c#-解码JSON Web令牌(Xamarin.Android)
基本上,我想对base64编码的JWT进行解码,以提取主体部分中的信息.
我尝试寻找解码令牌的可能性,但是所有JWT Nuget-Packages都无法与我的Xamarin.Android项目一起使用,因为Mono没有程序集,并且在他们自己的论坛上没有关于此主题的更多信息.
你们有解决方案吗?帮助将不胜感激!
解决方法:
您可以使用便携式的JWT版本:https://github.com/senzacionale/jwt-portable-dotnet
在NuGet https://www.nuget.org/packages/Portable.JWT/上也可用
解码示例中有一个错误.它是JWT.exceptions.SignatureVerificationException而不是JWT.SignatureVerificationException
ios – 在swift 2中解析json对象
我的json如下
{ status : true; data :[ "url" : "","startDate" : "","endDate" : "",... ] }
我在swift中的代码是这样的
进口基金会
class SplashResponse { let STATUS = "status"; let DATA = "data"; let URL = "Url" let CONTACT_NO = "ContactNo"; let SPLASH_IMAGE = "SplashImage"; let SPLASH_ID = "SplashId"; let TITLE = "Title"; let NO_VIEW = "NoView"; let IS_ACTIVE = "isActive"; let START_DATE = "StartDate"; let END_DATE = "EndDate"; var status : Bool var url : String var contactNo : String var splashImage : String var splashId : Int var title : String var numOfViews : Int var isActive : Bool var startDate : String var endDate : String init(data : NSDictionary){ status = data[STATUS] as! Bool; if (status == true) { if let item = data[DATA] as? [String: AnyObject] { url = item[URL] as! String; contactNo = item[CONTACT_NO] as! String; splashImage = item[SPLASH_IMAGE] as! String; splashId = item[SPLASH_ID] as! Int; title = item[TITLE] as! String; numOfViews = item[NO_VIEW] as! Int; isActive = item[IS_ACTIVE] as! Bool; startDate = item[START_DATE] as! String; endDate = item[END_DATE] as! String; } } else { url = ""; contactNo = ""; splashImage = ""; splashId = -1; title = ""; numOfViews = -1; isActive = false; startDate = ""; endDate = ""; } } }
我收到了以下错误
Return from initializer without initializing all stored properties
解决方法
您有两个选项可用于状态条件,但在真正的分支内部,您创建了一个没有其他分支的新条件,因此编译器正确地抱怨未初始化的存储属性.
我的建议是首先安全地解包数据[DATA]而不制作新的范围,然后使用这些值.
ios – 在Swift中解码JSON Web令牌
static func decodePayload(tokenstr: String) { //splitting JWT to extract payload let arr = split(tokenstr) {$0 == "."} //base64 encoded string i want to decode let base64String = arr[1] as String println(base64String) //eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0 //attempting to convert base64 string to nsdata let nsdata: NSData = NSData(base64EncodedString: base64String,options: NSDataBase64DecodingOptions(rawValue: 0)) //decoding fails because nsdata unwraps as nil let base64Decoded: Nsstring = Nsstring(data: nsdata!,encoding: NSUTF8StringEncoding)! }
解决方法
eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0
不是有效的Base64编码字符串,因为它的长度
不是4的倍数.一些Base64解码器容忍这个错误,但是
NSData方法没有.
所以这实际上是服务器端创建的错误
Base64编码的字符串.如有必要,您可以在应用中修复它
通过添加= =字符所需的填充(为Swift 2更新的代码):
var base64String = arr[1] as String if base64String.characters.count % 4 != 0 { let padlen = 4 - base64String.characters.count % 4 base64String += String(count: padlen,repeatedValue: Character("=")) }
现在解码按预期工作:
if let data = NSData(base64EncodedString: base64String,options: []),let str = String(data: data,encoding: NSUTF8StringEncoding) { print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"} }
斯威夫特4:
var base64String = "eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0" if base64String.count % 4 != 0 { let padlen = 4 - base64String.count % 4 base64String.append(contentsOf: repeatElement("=",count: padlen)) } if let data = Data(base64Encoded: base64String),encoding: .utf8) { print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"} }
ios – 如何在swift中解析Firebase FDatasnapshot json数据
架构是
{ title: "dog",images: { main: "dog.png",others: { 0: "1.png",1: "2.png",2: "3.png" } } }
我如何解析FDataSnapshot快速模型?
解决方法
您无需解析Firebase JSON数据来访问它,您可以直接访问它.
FDataSnapshots包含一个.key,它是Firebase和.value中的父键. .Value可能包含一个节点或多个节点. Value将具有表示快照中数据的键:值对
因此,对于您的示例,您将拥有这样的Firebase结构
dogs dog_id_0 title: "dog" type: "Alaskan Malamute" images: main: "dog.png" others: 0: "1.png" 1: "2.png" dog_id_1 title: "another dog" type: "Boxer" images: main: "another_dog.png" others: 0: "3.png" 1: "4.png"
所以,假设你想一次一个地读取每个dog_id_x节点并打印一些值.
var ref = Firebase(url:"https://your-app.firebaseio.com/dogs") ref.observeEventType(.ChildAdded,withBlock: { snapshot in println(snapshot.value.objectForKey("title")) println(snapshot.value.objectForKey("type")) })
这将输出
dog Alaskan Malamute another dog Boxer
dog_id_0和dog_id_1是使用Firebase childByAutoId创建的节点名称.
你可以轻松地创建一个Dog类,并将它传递给FDataSnapshot,它将从快照中的数据填充该类.
今天关于在Swift中解码JSON Web令牌和swiftjson解析的分享就到这里,希望大家有所收获,若想了解更多关于c#-解码JSON Web令牌(Xamarin.Android)、ios – 在swift 2中解析json对象、ios – 在Swift中解码JSON Web令牌、ios – 如何在swift中解析Firebase FDatasnapshot json数据等相关知识,可以在本站进行查询。
本文标签: