GVKun编程网logo

在Swift中解码JSON Web令牌(swiftjson解析)

12

在本文中,我们将带你了解在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解析)

在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)

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对象

ios – 在swift 2中解析json对象

我是iOS和 Swift编程的新手,我正在尝试创建一个解析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

解决方法

您的问题是,如果if let item = …条件失败,编译器不知道如何初始化您的值.

您有两个选项可用于状态条件,但在真正的分支内部,您创建了一个没有其他分支的新条件,因此编译器正确地抱怨未初始化的存储属性.

我的建议是首先安全地解包数据[DATA]而不制作新的范围,然后使用这些值.

ios – 在Swift中解码JSON Web令牌

ios – 在Swift中解码JSON Web令牌

尝试在 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)!


}

解决方法

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数据

ios – 如何在swift中解析Firebase FDatasnapshot json数据

我在从Firebase获取数据时遇到问题.

架构是

{
    title: "dog",images: {
        main: "dog.png",others: {
            0: "1.png",1: "2.png",2: "3.png"
        }
    }
}

我如何解析FDataSnapshot快速模型?

解决方法

Firebase是Nosql JSON数据库,没有架构,也没有表.数据以带有节点的“树”结构存储;父母和孩子.

您无需解析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数据等相关知识,可以在本站进行查询。

本文标签: