代码之家  ›  专栏  ›  技术社区  ›  user7538827

将字符串值解析为对象

  •  1
  • user7538827  · 技术社区  · 7 年前

    嗨,那么我有一个这样的问题:我有一个用swift编写的应用程序,它用 json 阵列到 节点。js公司 ! 我应该推断用户名和密码参数吗?我该怎么办?

    银行代码:

    // prepare json data
    let json: [String: Any] = ["Username": ""+UsernameTextBox.text!,"Password": ""+PasswordTextBox.text!]
    
    let jsonData = try? JSONSerialization.data(withJSONObject: json)
    
    // create post request
    let url = URL(string: "http://localhost:3000/login")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    // insert json data to the request
    request.httpBody = jsonData
    
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "No data")
            return
        }
        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let responseJSON = responseJSON as? [String: Any] {
            print(responseJSON)
        }
    }
    
    task.resume()
    

    节点。js代码:

    var express = require("express");
    var myParser = require("body-parser");
    var app = express();
    
    //Login 
    app.use(myParser.urlencoded({extended : true}));
       app.post("/login", function(request, response) {
         console.log(request.body); 
    
        });
    
    //Application Listen on Port
    app.listen(3000,function(){
        console.log("Application Server Start on Port: 3000");
    })
    

    正文日志:

    enter image description here

    新建JavaScript代码图像:

    enter image description here

    4 回复  |  直到 7 年前
        1
  •  1
  •   YouneL    7 年前

    为什么使用 JSON.stringify 在字符串上,删除它,您的代码应该可以工作:

    var data = JSON.parse(Object.keys(request.body)[0]);
    var username = data.Username;
    var password = data.Password;
    

    var body = {'{"Password":"dsdsd","Username":"dsdsdsds"}':''};
    
    var data = JSON.parse(Object.keys(body)[0]);
    var username = data.Username;
    var password = data.Password;
    
    console.log(username, password);
        2
  •  1
  •   Pushpendra Singh Rajawat    7 年前

    将extended更改为false并尝试此操作,您将在请求正文中获得json对象。

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    
        3
  •  1
  •   Malice    7 年前

    扩展到@edkeveked,

    var data = JSON.parse(Object.keys(request.body)[0]);
    var username = data.Username;
    var password = data.Password;
    
        4
  •  1
  •   edkeveked    7 年前

    输出:

    console.log(request.body);
    

    {{"username": "something", "password": "somethingElse"}: ""}
    

    您可以将数据的形式更改为可以轻松访问的形式,例如:

    {"Username": "something", "Password": "somethingElse"}
    

    但是,如果出于某些原因,您更愿意坚持问题中的数据发送方式,您可以使用以下方法提取用户凭据:

     var data = JSON.parse(Object.keys(request.body)[0]);
     var username = data.Username;
     var password = data.Password;