我尝试在REST函数之前获取sessionid
,但如果我不转换toString();
则只显示数字(21 22 2e
...)。
查看此图片:
1º: 视频:使用分裂之前。
!!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.parse
和JSON.stringify
进行了测试,但它无效,只显示'undefined'
。转换toString();
后,由于我已将值转换为字符串,因此我考虑使用split
仅获取sessionid
的值。
当我使用split
时,所有转换为array
,返回来自console.log(data)
,请参阅图片2:
2º:
视角:使用后拆分并自动转换为array
。
使用后的返回split
符合我的代码中的条件:
3º:
使用后split
的返回符合我的代码中的条件:
[ 'bkkRQxxxxxxxxxxxxx' ]
我只想:
bkkRQxxxxxxxxxxxxx
我想知道如何在所有这些诱惑之后解决这个问题,但是如果你有另一种获得sessionid
的方式,我会很高兴知道。
谢谢你!
答案 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);