将字符串转换或解析为JSON对象

时间:2014-11-15 13:05:34

标签: javascript jquery arrays json

有一个面试问题(Javascript),我的朋友和我很长时间都无法解决,所以想到这里问一下,

Question:
String:
2014<18.3,11.4,12.1,19.5,1000&&11.2,34.5,67.1,18,20000>name=sample,position=engineer,company=abc

并且end reult应该是具有以下格式的JSON Objwct。任何人都可以帮助解决这个问题。

Output:
{[
    {"Proposal":"2014"}, 
    {"values":"[18.3,11.4,12.1,19.5],[11.2,34.5,67.1,18]"},
    {"Items":"[1000,20000]"},
    {"name":"sample"},
    {"position":"engineer"},
    {"company":"abc"},
]}

期待解决方案和解释。

谢谢, Basky

2 个答案:

答案 0 :(得分:1)

这是您的解决方案。

  1. 输入字符串应该包含所有参数,如果缺少任何参数,代码将会中断。
  2. 逻辑是动态的,支持任意数量的数值,最后一位数字将被视为项目。
  3. 逻辑还支持输入字符串中的n个键/值对。
  4. 在控制台中检查以下代码。

    var JsonOutput = [];
    var sRawInput = "2014<18.3,11.4,12.1,19.5,1000&&11.2,34.5,67.1,18,20000>name=sample,position=engineer,company=abc";
    
    JsonOutput.push({ "Proposal" : sRawInput.split("<")[0] });
    
    var oValues = sRawInput.split("<")[1].split(">")[0].split("&&");
    var oActualValues = [];
    var oActualItems = [];
    
    $(oValues).each(function(Ind, Val){
        oActualValues.push(Val.split(",").slice(0, Val.split(",").length - 1).join());
        oActualItems.push(Val.split(",")[Val.split(",").length - 1]);
    });
    
    JsonOutput.push({ "Values" : oActualValues });
    JsonOutput.push({ "Items" : oActualItems });
    
    var OtherValues = sRawInput.split(">")[1].split(",");
    
    $(OtherValues).each(function(Ind, Val){
        JsonOutput.push(JSON.parse("{\"" + Val.split("=")[0] + "\":\"" + Val.split("=")[1] + "\"}"));
    });
    
    console.log(JsonOutput);
    console.log(JSON.stringify(JsonOutput));
    

答案 1 :(得分:0)

注意: 值不正确,因为它应包含2个数组而不是单个数组。

项目不正确,因为它应包含数字而不是字符串。

外部包装器也应该是obj {}