【发布时间】:2014-05-28 13:22:27
【问题描述】:
我可以使用 JsontoHtml 库将 JSON 转换为 HTML。现在,我需要将当前的 HTML 转换为 JSON,如本网站所示。在查看代码时,我发现了以下脚本:
<script>
$(function(){
//HTML to JSON
$('#btn-render-json').click(function() {
//Set html output
$('#html-output').html( $('#html-input').val() );
//Process to JSON and format it for consumption
$('#html-json').html( FormatJSON(toTransform($('#html-output').children())) );
});
});
//Convert obj or array to transform
function toTransform(obj) {
var json;
if( obj.length > 1 )
{
json = [];
for(var i = 0; i < obj.length; i++)
json[json.length++] = ObjToTransform(obj[i]);
} else
json = ObjToTransform(obj);
return(json);
}
//Convert obj to transform
function ObjToTransform(obj)
{
//Get the DOM element
var el = $(obj).get(0);
//Add the tag element
var json = {'tag':el.nodeName.toLowerCase()};
for (var attr, i=0, attrs=el.attributes, l=attrs.length; i<l; i++){
attr = attrs[i];
json[attr.nodeName] = attr.value;
}
var children = $(obj).children();
if( children.length > 0 ) json['children'] = [];
else json['html'] = $(obj).text();
//Add the children
for(var c = 0; c < children.length; c++)
json['children'][json['children'].length++] = toTransform(children[c]);
return(json);
}
//Format JSON (with indents)
function FormatJSON(oData, sIndent) {
if (arguments.length < 2) {
var sIndent = "";
}
var sIndentStyle = " ";
var sDataType = RealTypeOf(oData);
// open object
if (sDataType == "array") {
if (oData.length == 0) {
return "[]";
}
var sHTML = "[";
} else {
var iCount = 0;
$.each(oData, function() {
iCount++;
return;
});
if (iCount == 0) { // object is empty
return "{}";
}
var sHTML = "{";
}
// loop through items
var iCount = 0;
$.each(oData, function(sKey, vValue) {
if (iCount > 0) {
sHTML += ",";
}
if (sDataType == "array") {
sHTML += ("\n" + sIndent + sIndentStyle);
} else {
sHTML += ("\"" + sKey + "\"" + ":");
}
// display relevant data type
switch (RealTypeOf(vValue)) {
case "array":
case "object":
sHTML += FormatJSON(vValue, (sIndent + sIndentStyle));
break;
case "boolean":
case "number":
sHTML += vValue.toString();
break;
case "null":
sHTML += "null";
break;
case "string":
sHTML += ("\"" + vValue + "\"");
break;
default:
sHTML += ("TYPEOF: " + typeof(vValue));
}
// loop
iCount++;
});
// close object
if (sDataType == "array") {
sHTML += ("\n" + sIndent + "]");
} else {
sHTML += ("}");
}
// return
return sHTML;
}
//Get the type of the obj (can replace by jquery type)
function RealTypeOf(v) {
if (typeof(v) == "object") {
if (v === null) return "null";
if (v.constructor == (new Array).constructor) return "array";
if (v.constructor == (new Date).constructor) return "date";
if (v.constructor == (new RegExp).constructor) return "regex";
return "object";
}
return typeof(v);
}
</script>
现在,我需要在 PHP 中使用以下函数。我可以获取 HTML 数据。我现在需要的只是将 JavaScript 函数转换为 PHP 函数。这可能吗?我的主要疑惑如下:
Javascript 函数
toTransform()的主要输入是一个对象。是否可以通过 PHP 将 HTML 转换为对象?此特定 JavaScript 中存在的所有函数在 PHP 中是否可用?
请给我建议。
当我尝试根据给出的答案将脚本标记转换为 json 时,我得到了错误。当我在json2html站点尝试它时,它显示如下: ..如何实现相同的解决方案?
【问题讨论】:
-
可以转换。 toTransform 不采用随机对象,它在 html 中获取一组子项(也许可以玩弄代码,看看它放入了什么,吐出什么)等等。不过,将它转换为 PHP 是你的工作,而不是我们的:)
-
@user3036342 感谢您的建议。该输入是我感到困惑的。是否有任何 php 函数可用于在 Html 中获取子数组?我尝试将其类型转换为对象。但它没有用?
-
javascript内置了dom解析,在php中可以使用domdocument php.net/manual/en/class.domdocument.php
-
@Ganesh 您的问题是您出于某种原因试图将其转换为对象,输入是一个数组。执行 alert() 来检查 JavaScript 实际发送到这些函数的内容,然后您将能够更好地使其在您的 PHP 版本中返回相同的内容。如前所述,您可以使用 DomDocument。查看一个名为“PHPQuery”的库。它是 jQuery 的 PHP 版本,应该可以帮到你很多
-
与其寻找将html转换为json的方法,不如尝试将xml转换为json。你可以使用这个stackoverflow.com/questions/8830599/php-convert-xml-to-json
标签: javascript php jquery html json