当前位置: 首页 > 知识库问答 >
问题:

Json解析Swift 3 Alamofire

申屠泳
2023-03-14

我是Swift3新手,在获取Json返回然后发送请求时遇到了问题。我试图向服务器发送一个带有参数username和password的post请求,并使用带有信息的Json获得响应,但我还无法获得要返回的数据。

输出:

错误:NSURLErrorDomain:-1003状态代码:200,标头连接=关闭;“Content-type”=“Application/JSON”;“transfer-encoding”=标识

Android上的请求如下所示:

            "{\n" +
            "    \"jsonrpc\": \"2.0\",\n" +
            "    \"id\": \"1\",\n" +
            "    \"method\": \"call\",\n" +
            "    \"params\": [\n" +
            "        \"" + LOGIN_TOKEN + "\",\n" +
            "        \"session\",\n" +
            "        \"login\",\n" +
            "        {\n" +
            "            \"username\": \"" + userName + "\",\n" +
            "            \"password\": \"" + password + "\"\n" +
            "        }\n" +
            "    ]\n" +
            "}";

这是我应该发送的请求:

"{ \"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"call\", \"params\": [ \"00000000000000000000000000000000\", \"session\", \"login\", { \"username\": \"root\", \"password\": \"admin01\"  } ] }" 

这是我的代码:

   override func viewDidLoad() {
   var userName = "root"
   var password = "admin01"
   //var LOGIN_TOKEN = 0000000000000000

    let jsonObject: [String: Any] =
        ["jsonrpc" : 2.0,
         "id": 1,
         "method": "call",
         "params": [ "00000000000000",
                     "session",
                     "login",
                     [ "username": userName,
                       "password": password]],
         ]

    do {
        let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted)
        // here "jsonData" is the dictionary encoded in JSON data

        let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])
        // here "decoded" is of type `Any`, decoded from JSON data

        // you can now cast it with the right type
        if let dictFromJSON = decoded as? [String:String] {
            // use dictFromJSON
        }
    } catch {
        print(error.localizedDescription)
    }

    Alamofire.request("http://192.168.1.1/ubus", method: .post, parameters: jsonObject, encoding: JSONEncoding.default)
        .responseJSON { response in
            print(response)
            //to get status code
            if let status = response.response?.statusCode {
                switch(status){
                case 201:
                    print("example success")
                default:
                    print("error with response status: \(status)")
                }
            }
            //to get JSON return value
            if let result = response.result.value {
                let JSON = result as! NSDictionary
                print(JSON)
            }

    }

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

共有1个答案

斜宁
2023-03-14

您的JSON对象似乎无效

有非常有用的JSON验证器是免费的。首先想到的是http://jsonlint.com

我认为,根据您发布的代码,您希望您的jsonObject看起来像这样,这是一个有效的JSON:

[
    {
    "jsonrpc": 2.0,
    "id": 1,
    "method": "call",
    "params": ["00000000000000", "session", "login"],
    "username": username,
    "password": password
    }
]

我假设usernamepassword变量是您已经分配的字符串?

 类似资料:
  • json 库能够解析字符串或文本中的 JSON 内容。 该库将 JSON 解析为 Python 字典或列表,也能将 Python 字典或列表转换为 JSON 字符串。 解析 JSON 如下的 JSON 格式的字符串: json_string = '{"first_name": "Guido", "last_name":"Rossum"}' 如下代码能够将其解析: import json par

  • 问题内容: 如何使用jQuery解析此json? 问题答案: 术语“解析”有点放错了位置,因为它已经是JSON格式。 您无需解析它,而只需对其进行访问。如果它是JSON格式的大String,则确实需要在访问之前先将其解析为可用的JSON对象。 此JSON包含一个属性,而该属性又包含一个array 。您可以使用点运算符访问属性。您可以使用给定的索引获取数组项,其中零表示第一项。 该数组又包含一个对象

  • 主要内容:什么是 JSON,在 JavaScript 中解析 JSON 数据,解析嵌套的 JSON 数据,将数据转换为 JSONJSON 全称为“JavaScript Object Notation”,是当前最流行的一种轻量级的数据交换格式,用来存储和传输数据,通常服务器端与客户端在进行交互时就是使用 JSON 格式的数据。 什么是 JSON JSON 是从 JavaScript 脚本中演变而来的,并且使用 JavaScript 中的语法来描述数据。与 XML 一样,JSON 也是一种基于文本的

  • 问题内容: 当响应数据以多余的字符开头时,需要帮助解析JSON。 我可以使用JSON提取查询从示例中提取数据- 但是,我找不到任何合适的方法来从以下JSON对象提取数据: 尝试使用通配符以–来转义JSON对象之前的前导字符,但没有运气 任何帮助将非常感激 问题答案: 这一点使您的JSON有点无效。我建议使用JSR223 PostProcessor 和Groovy语言代替: 上面的代码将与JSON

  • 如何使用GSON解析这个json? 我的代码: 我的stacktrace com.google.gson.JsonSyn出租车异常:java.lang.IllegalStateExctive:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$com.google.gson.internal.bind.ReflecteTypeAdapterFactory$Adapter.rea

  • 我的SoapUI Groovy脚本有问题。我有以下json(简化): 在之前的测试步骤中,我将XXX和YYY的值作为请求参数,并将其提取为字符串列表,但我的问题是我需要提取数据内容。XXX和数据。YYY,但是当我想在循环中这样做的时候,我总是得到null。我的代码: 是否有任何选项可以在循环中将此“id”传递给 content.data。{id} 获取任何内容,而不是空值 亲切问候

  • 问题内容: 我正在创建一个复杂的JavaScript库,用于与公司的服务器端框架一起使用。 服务器端框架将其数据编码为简单的XML格式。没有花哨的命名空间或类似的东西。 理想情况下,我想将浏览器中的所有数据解析为JSON。但是,如果这样做,我需要重写一些服务器端代码以吐出JSON。这很痛苦,因为我们拥有无法轻易更改的公共API。 我真正关心的是浏览器中解析JSON和XML的性能。真的有很大的区别要

  • 问题内容: 我正在使用NewtonsoftJson库来解析json,但我不知道如何使用它。我使用JObject解析了字符串。当我在即时窗口中输出JObject实例的值时,我得到了:- 我应该怎么做才能获得这个工作的价值? 问题答案: 我个人更喜欢将JavaScriptSerializer与.NET环境中的JSON一起使用。默认情况下,它将返回Dictionary结果,但可用于解析到自定义对象(或者