htm-to-json
Version:
to convert html string to json file , and also get data through tag name ,tag id and attribute value.
193 lines (185 loc) • 4.91 kB
JavaScript
//to define constructor
function htmlToJson()
{
};
//to implement method properties
htmlToJson.prototype.convert_html_to_json = function(htmlStr,callback)
{
try{
var jsn = {};
var len = htmlStr.length || 0;
var str = htmlStr || "";
var pos = 0;
for(var j=pos;j<len;j++)
{
if(str.charAt(j) == '<' && str.charAt(j+1) !='/' && str.charAt(j+1) !='!')
{
var tagLine = "";
for(var k=++j;k<len;k++)
{
if(str.charAt(k) == ">")
{
//console.log(tagLine);
var _tagNameList = tagLine && tagLine.trim().split(' ');
var _tagRootName = _tagNameList[0] ,_tagValue = "";
if(!jsn.hasOwnProperty(_tagRootName))
jsn[_tagRootName] = [];
if(_tagNameList.length>1)
{
var _tagAttr = _tagNameList.slice(1,_tagNameList.length);
var _tagAttrStr = _tagAttr.join(' ');
var _tagAttrJsn = {},tokenId = "",tokenVal = "";
//console.log(_tagAttrStr);
for(var s=0;s<_tagAttrStr.length;s++)
{
if(_tagAttrStr.charAt(s) != " " && _tagAttrStr.charAt(s) != "=")
tokenId += _tagAttrStr.charAt(s);
if(_tagAttrStr.charAt(s) == "=")
{
var _checkAttrEnd = "";
for(var p = ++s;p<_tagAttrStr.length;p++)
{
if(p == s)
{
var _trimStr = _tagAttrStr.substring(p,_tagAttrStr.length);
_trimStr = _trimStr && _trimStr.trim();
if(_trimStr.charAt(0) == "'")
_checkAttrEnd = "'";
else if(_trimStr.charAt(0) == '"')
_checkAttrEnd = '"';
else
_checkAttrEnd = " ";
}
if(_tagAttrStr.charAt(p) != "'" && _tagAttrStr.charAt(p) != '"' && _tagAttrStr.charAt(p) != _checkAttrEnd)
{
tokenVal += _tagAttrStr.charAt(p);
}
if((tokenVal.length != 0 && _tagAttrStr.charAt(p) == _checkAttrEnd) || p == _tagAttrStr.length-1)
{
_tagAttrJsn[tokenId] = tokenVal;
tokenId = "";
tokenVal = "";
s = p;
break;
}
}
}
}
//get innerHTML
if(_tagRootName && _tagRootName.trim() != "script" && _tagRootName.trim() != "style")
for(var v = k+1;v<len;v++)
{
if(str.charAt(v) == "<")
{
if(_tagValue.length != 0)
_tagAttrJsn['innerHTML']=_tagValue;
v = len;
}
else
_tagValue += str.charAt(v);
}
jsn[_tagRootName].push(_tagAttrJsn);
break;
}
else
{
//get innerHTML
if(_tagRootName && _tagRootName.trim() != "script" && _tagRootName.trim() != "style")
for(var v = k+1;v<len;v++)
{
if(str.charAt(v) == "<")
{
if(_tagValue.length != 0)
{
if(jsn[_tagRootName].length != 0)
jsn[_tagRootName][jsn[_tagRootName].length-1]['innerHTML'] = _tagValue;
else
jsn[_tagRootName].push({'innerHTML' : _tagValue});
}
v = len;
}
else
_tagValue += str.charAt(v);
}
j=k;
break;
}
}
else
{
tagLine += str.charAt(k);
}
}
}
}
callback(null,jsn);
}catch(err)
{
callback(err,null);
}
};
//to get data by using tag property id
htmlToJson.prototype.get_data_by_id = function(jsonData,id,callback)
{
if(id == "" || id == null || id.length == 0 || id == undefined)
return "";
if(jsonData == "")
return "";
var data = [];
for(var key in jsonData)
{
for(var i=0;i<jsonData[key].length;i++)
{
if(jsonData[key][i].hasOwnProperty('id') || jsonData[key][i].hasOwnProperty('Id') || jsonData[key][i].hasOwnProperty('ID'))
{
if(jsonData[key][i]['id'] == id)
data.push(jsonData[key][i]);
else if(jsonData[key][i]['Id'] == id)
data.push(jsonData[key][i]);
else if(jsonData[key][i]['ID'] == id)
data.push(jsonData[key][i]);
}
}
}
callback(null,data);
};
//to get data by using tag name
htmlToJson.prototype.get_data_by_tag = function(jsonData,TagName,callback)
{
if(TagName == "" || TagName == null || TagName.length == 0 || TagName == undefined)
return "";
if(jsonData == "")
return "";
var data = [];
for(var key in jsonData)
{
if(key == TagName)
data = jsonData[key];
}
callback(null,data);
};
//to get json data by using attribute value
htmlToJson.prototype.get_data_by_attr_val = function(jsonData,attrName,callback)
{
if(attrName == "" || attrName == null || attrName.length == 0 || attrName == undefined)
return "";
if(jsonData == "")
return "";
var data = [];
attrName = attrName.trim();
for(var key in jsonData)
{
for(var i=0;i<jsonData[key].length;i++)
{
for(var nkey in jsonData[key][i])
{
if(jsonData[key][i][nkey] && jsonData[key][i][nkey].trim() == attrName)
{
data.push(jsonData[key][i]);
}
}
}
}
callback(null,data);
};
module.exports = new htmlToJson();