将文本项转换为JSON

时间:2014-04-28 08:22:12

标签: javascript json string

我的文字包含下一格式的mani列表项目:

var text = "<li>M3-2200 (da2/M3-2200)</li><li>N3-2200 (da2/N3-2200)</li><li>Picasso (picasso/A500)</li><li>Picasso (picasso/A501)</li><li>Picasso (ventana/A500)</li>..."

我正在尝试使用下一种格式创建JSON:

{
     name: "M3-2200",
     Model: "M3-2200"    
}

我正在尝试使用下一个代码,但它不起作用我的问题是推送。任何人都可以解释我怎么做对了?

result ={};
while(text.indexOf("<li>")!== -1){
    var listi = text.substring(text.indexOf("<li>"), text.indexOf("</li>"));
    var model = listi.substring(0, listi.indexOf("(") -1);
    var name = listi.substring(listi.indexOf("("), listi.indexOf(")"));
    var item = {name: name: model : model};
    result.push(item);
    var text = text.substring(text.indexOf("</li>"));
}

3 个答案:

答案 0 :(得分:1)

针对您的问题的其他解决方案:

var text = "<li>M3-2200 (da2/M3-2200)</li><li>N3-2200 (da2/N3-2200)</li><li>Picasso (picasso/A500)</li><li>Picasso (picasso/A501)</li><li>Picasso (ventana/A500)</li>";
var result = JSON.parse('[' + 
  text.replace(/(<li>|<\/li>| \(|\))/g, function(_, part){
    switch (part) {
      case '<li>': return '{"name":"';
      case '</li>': return '},';
      case ' (': return '", "Model":"';
      case ')': return '"';
    }
  }) + '0]').slice(0, -1);

答案 1 :(得分:1)

var text = "<li>M3-2200 (da2/M3-2200)</li><li>N3-2200 (da2/N3-2200)</li><li>Picasso (picasso/A500)</li><li>Picasso (picasso/A501)</li><li>Picasso (ventana/A500)</li>";
JSONStr = text.trim().replace(/<li>/g,"{\"name\":\"").replace(/ \(/g,"\" , \"model\":\"").replace(/\)\<\/li\>/g,"\"},");
JSONStr = "["+JSONStr.substring(0,JSONStr.length-1)+"]";
console.log(JSONStr);

以上代码是否有效?

答案 2 :(得分:0)

我希望我能正确理解你的问题。如果这是您想要的输出:

[{"name":"M3-2200 ","model":"da2/M3-2200"},{"name":"N3-2200 ","model":"da2/N3-2200"},{"name":"Picasso ","model":"picasso/A500"},{"name":"Picasso ","model":"picasso/A501"},{"name":"Picasso ","model":"ventana/A500"}]

然后这是一种方法:

var text = "<li>M3-2200 (da2/M3-2200)</li><li>N3-2200 (da2/N3-2200)</li><li>Picasso (picasso/A500)</li><li>Picasso (picasso/A501)</li><li>Picasso (ventana/A500)</li>";
var extractItem = function (item) {
  var partsArray = /(.+) ?\((.+)\)\<\/li>/.exec(item)
  if(partsArray) return {"name":partsArray[1], "model":partsArray[2]}
}
var result = text.split('<li>')
  .map(extractItem)
  .filter(function(e){return e != undefined});
console.log(JSON.stringify(result));