Javascript Node.js如何将冒号分隔的键值对序列化为JSON
给定(作为响应后机构): 我需要将它序列化为json,我使用节点从服务器获取它。 我当然可以一个字符串一个字符串地解析它Javascript Node.js如何将冒号分隔的键值对序列化为JSON,javascript,node.js,request,Javascript,Node.js,Request,给定(作为响应后机构): 我需要将它序列化为json,我使用节点从服务器获取它。 我当然可以一个字符串一个字符串地解析它 但难道没有更简单的方法吗 可能是准备好了序列化程序或其他东西来将这些数据序列化为JSON 这是什么格式 从以下代码中筛选每行 var jsonObject = {} function parser(str){ var arr = str.split(":"); jsonObject[arr[0]] = arr[1]; } 最后一个jsonObject是您需要的json。
从以下代码中筛选每行
var jsonObject = {}
function parser(str){
var arr = str.split(":");
jsonObject[arr[0]] = arr[1];
}
最后一个jsonObject是您需要的json。
确保您需要将RESULT:OK、RESULT\PS:FINISHED、RESULT\u CODE:000作为与解析器分离的字符串传递。OK,未找到任何现成的解决方案。 这样写下这个函数:
parseResponse = function(response) {
var result = { };
response.replace(/([^\s:]+)\s*:\s*([^\n\s]+)/gi, function() {
var key = arguments[1], value = decodeURIComponent(arguments[2]);
result[key] = !isNaN(parseFloat(value)) && isFinite(value) ? parseFloat(value) : value;
});
return result;
}
据我所知,这只是一个分隔的纯文本响应。(您从何处获得它?事务响应?)然而,由于它非常简单,因此可以通过快速map reduce操作轻松解析
function trim(str) {
return str.replace(/^\s+|\s+$/g, "");
}
function nonEmpty(str) {
return null != str && str.length > 0;
}
function splitKeyValue(row) {
var tokens = row.split(":").map(trim);
// My assumption that a row should only contain 2 colon separated tokens
if (tokens.length > 2) {
throw new Error("Malformed row: " + row);
}
return tokens;
}
function merge(acc, item) {
// Normalise key to lower case, to guarantee spelling
acc[item[0].toLowerCase()] = item[1];
return acc;
}
function parseResponse(payload) {
return payload.split("\n").
filter(nonEmpty).
map(splitKeyValue).
reduce(merge, {});
}
使用上面的代码片段,结果应该是:
var payload =
"RESULT: OK\n" +
"RESULT_PS: FINISHED\n" +
"RESULT_CODE: 000\n";
var parsed = parseResponse(payload);
console.log(parsed);
// Output:
// {
// result: "OK",
// result_ps: "FINISHED",
// result_code: "000"
// }
// Each separate field is then accessible from it's name
console.log(parsed.result); // Output: "OK"
如果使用,则有一个名为:
对于浏览器,答案中描述了很多好方法。这是另一个(香草JS):
var有效载荷=
“结果:正常\n\r”+
“结果\u PS:已完成\n”+
“结果\u代码:000\n”;
var browserParsed=payload.split(“\n”)
.map(功能){
返回s.trim().split(“:”);
})
.过滤器(功能){
返回s.length&&s.length>1;
})
.减少(功能)(附件c){
acc[c[0].trim()]=c[1].trim();
返回acc;
}, {});
console.log(浏览器解析)
在任何情况下,此类文本的最佳结构都是一个由“:”分隔元组组成的数组。事务响应。如果值中有空格,此解决方案将截断spaceFair注释中的值,根据我正在解析的响应规范,应该没有空格值。
var payload =
"RESULT: OK\n" +
"RESULT_PS: FINISHED\n" +
"RESULT_CODE: 000\n";
var parsed = parseResponse(payload);
console.log(parsed);
// Output:
// {
// result: "OK",
// result_ps: "FINISHED",
// result_code: "000"
// }
// Each separate field is then accessible from it's name
console.log(parsed.result); // Output: "OK"
const querystring = require('querystring'),
payload =
"RESULT: OK\n\r" +
"RESULT_PS: FINISHED\n" +
"RESULT_CODE: 000\n";
let parsed = querystring.parse(payload, '\n', ':', {decodeURIComponent: s => s.trim()});
console.log(parsed);