Javascript Node.js如何将冒号分隔的键值对序列化为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。

给定(作为响应后机构):

我需要将它序列化为json,我使用节点从服务器获取它。 我当然可以一个字符串一个字符串地解析它

  • 但难道没有更简单的方法吗
  • 可能是准备好了序列化程序或其他东西来将这些数据序列化为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);