Node.js如何序列化冒号分隔的键值对到JSON
Node.js How To serialize colon separated key value pairs to JSON
给定(作为post响应正文):
RESULT: OK
RESULT_PS: FINISHED
RESULT_CODE: 000
我需要序列化它到json,我使用节点的请求从服务器得到这个。我当然可以一个字符串一个字符串地解析它。
- 但是没有更简单的方法吗?也许准备好序列化器或其他东西序列化这样的数据JSON?
- 这是什么格式?
从下列代码中筛选每一行
var jsonObject = {}
function parser(str){
var arr = str.split(":");
jsonObject[arr[0]] = arr[1];
}
你最终的jsonObject是你需要的json。
确保您需要将RESULT: OK, RESULT_PS: FINISHED,RESULT_CODE: 000作为与解析器分开的字符串传递。
据我所知,这只是一个带分隔符的纯文本响应。你从哪里得到的?事务响应吗?)然而,因为它很简单,所以很容易用一个快速的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"
好的,没有找到现成的解决方案。所以我写了这个函数:
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;
}
如果你使用node.js,有一个方便的模块叫做querystring:
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);
对于浏览器,答案中描述了许多好的方法。这是另一个(香草JS):
var payload =
"RESULT: OK'n'r" +
"RESULT_PS: FINISHED'n" +
"RESULT_CODE: 000'n";
var browserParsed = payload.split("'n")
.map(function (s) {
return s.trim().split(":");
})
.filter(function (s) {
return s.length && s.length > 1;
})
.reduce(function (acc, c) {
acc[ c[ 0 ].trim() ] = c[ 1 ].trim();
return acc;
}, {});
console.log(browserParsed);
相关文章:
- 正在数组中存储键值对
- 如何将新的键/值对元素添加到现有数组
- 在键值对中对求和值进行下划线
- 返回由键/值对定义的数组
- 在url参数javascript中存储键值对列表
- 将数组转换为键值对
- jQueryAJAX-将额外的键/值对推送到序列化的$_POST数组中
- 使用jQuery从ajax调用访问键值对
- 将动态键值对传递给函数
- d3使用键值对对对多个值的数据进行分组
- JS在封装对象中查找键值对
- 从html标记格式的字符串中提取键值对
- JavaScript 在函数中声明键值对
- 在JavaScript中为表单元素生成键值对
- 如何给$('inputs')每个函数,以将数据存储为 asp.net 中的键值对
- 从 JSON 获取键值对而不使用 .(DOT) 在 Java 脚本或 jquery 中
- 在键值对的唯一组合上合并对象
- 如何在 javascript 中将管道分隔的字符串解析为键值对
- 使用for循环将键值对分隔为两个变量
- Node.js如何序列化冒号分隔的键值对到JSON