获取数组中字符串的第一个字 - 来自返回REST

时间:2017-02-07 17:26:31

标签: javascript arrays node.js rest split

我尝试在REST函数之前获取sessionid,但如果我不转换toString();则只显示数字(21 22 2e ...)。

查看此图片:

: 视频:使用分裂之前。

 !!xxxxxxx.xxxxx.xxxxxxx.rest.schema.xxxxResp {error: null, sessionID: qdaxxxxxxxxxxxxxj}

我的代码:

var Client = require('./lib/node-rest-client').Client;
var client = new Client();

var dataLogin = {
   data: { "userName":"xxxxxxxx","password":"xxxxxxxx","platform":"xxxxx" },
   headers: { "Content-Type": "application/json" }
};

client.registerMethod("postMethod", "xxxxxxxxxxx/login", "POST");

client.methods.postMethod(dataLogin, function (data, response) {
   // parsed response body as js object
   // console.log(data); all return, image 1
   // raw response
if(Buffer.isBuffer(data)){
   data = data.toString('utf8'); // if i does not convert to string, return numbers, see image 1..
   console.log(data); //all inside image 2, and i want just value from sessionid

    var output = data;
    var res = output.split(" "); // using split
    res = res[4].split("}", 1);

  }
    console.log(res);  //image 3
});

我使用JSON.parseJSON.stringify进行了测试,但它无效,只显示'undefined'。转换toString();后,由于我已将值转换为字符串,因此我考虑使用split仅获取sessionid的值。

当我使用split时,所有转换为array,返回来自console.log(data),请参阅图片2:

2º: 视角:使用后拆分并自动转换为array

enter image description here

使用后的返回split符合我的代码中的条件:

3º: 使用后split的返回符合我的代码中的条件:

  [ 'bkkRQxxxxxxxxxxxxx' ]

我只想:

bkkRQxxxxxxxxxxxxx

我想知道如何在所有这些诱惑之后解决这个问题,但是如果你有另一种获得sessionid的方式,我会很高兴知道。

谢谢你!

1 个答案:

答案 0 :(得分:1)

Buffer转换为字符串后,使用data.substr(data.indexOf('{'))删除附在前面的所有内容,然后使用JSON.parse()。然后您可以使用该对象获取sessionID

if(Buffer.isBuffer(data)){
    data = data.toString('utf8');
    data = data.substr(data.indexOf('{'));
    obj = JSON.parse(data);
    console.log(obj.sessionID);
}

编辑: 您使用JSON.parse()时遇到的问题是因为返回的内容实际上不是JSON。 JSON规范要求引用属性(")。 See this article

如果字符串看起来像这样,那就可以了:{"错误":null," sessionID":qdaxxxxxxxxxxxxxj}

因为json不是真正的json,所以你可以使用正则表达式来获取你想要的信息。这应该适合你。

re = /(sessionID: )([^,}]*)/g;
match = re.exec(data);
console.log(match[2]);

编辑2:在完全阅读我上面链接的文章(oops haha​​)之后,这是处理不带引号的JSON的更好方法。

var crappyJSON = '{ somePropertyWithoutQuotes: "theValue!"  }';
var fixedJSON = crappyJSON.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');
var aNiceObject = JSON.parse(fixedJSON);