Javascript Java脚本名称-值对以未排序的方式存储
我不熟悉java脚本 现有的javascript代码可以读取JSON文档并创建XML。但是xml文档中的元素顺序与JSON文档中的元素顺序不同。 如何做到这一点?目前,java脚本使用树。我用了列表,但没有用。 不确定要使用哪个javascript数据结构,以便它将不按排序顺序/字母顺序存储数据。 高度赞赏任何代码示例Javascript Java脚本名称-值对以未排序的方式存储,javascript,Javascript,我不熟悉java脚本 现有的javascript代码可以读取JSON文档并创建XML。但是xml文档中的元素顺序与JSON文档中的元素顺序不同。 如何做到这一点?目前,java脚本使用树。我用了列表,但没有用。 不确定要使用哪个javascript数据结构,以便它将不按排序顺序/字母顺序存储数据。 高度赞赏任何代码示例 JSON: { "data:xxData": { "xyz": "value", "abc": "order", } } 结果XML: <dat
JSON:
{
"data:xxData": {
"xyz": "value",
"abc": "order",
}
}
结果XML:
<data:xxData>
<abc>order</abc>
<xyz>value</xyz>
</data:xxData>
顺序
价值
应为正确的XML:
<data:xxData>
<xyz>value</xyz>
<abc>order</abc>
</data:xxData>
价值
顺序
提前谢谢
代码如下:
我通过传递JSON字符串来调用writeXML
XML.ObjTree.prototype.writeXML = function ( tree ) {
var xml = this.hash_to_xml( null, tree );
return this.xmlDecl + xml;
};
XML.ObjTree.prototype.hash_to_xml = function ( name, tree ) {
var elem = [];
var attr = [];
for( var key in tree ) {
print("key: "+ key+'\n')
//print("tree: "+ tree[key]+'\n')
if ( ! tree.hasOwnProperty(key) ) continue;
var val = tree[key];
if ( key.charAt(0) != this.attr_prefix ) {
if ( typeof(val) == "undefined" || val == null ) {
elem[elem.length] = "<"+key+" />";
} else if ( typeof(val) == "object" && val.constructor == Array ) {
elem[elem.length] = this.array_to_xml( key, val );
} else if ( typeof(val) == "object" ) {
elem[elem.length] = this.hash_to_xml( key, val );
} else {
elem[elem.length] = this.scalar_to_xml( key, val );
}
} else {
attr[attr.length] = " "+(key.substring(1))+'="'+(this.xml_escape( val ))+'"';
}
}
var jattr = attr.join("");
var jelem = elem.join("");
if ( typeof(name) == "undefined" || name == null ) {
// no tag
} else if ( elem.length > 0 ) {
if ( jelem.match( /\n/ )) {
jelem = "<"+name+jattr+">\n"+jelem+"</"+name+">\n";
} else {
jelem = "<"+name+jattr+">" +jelem+"</"+name+">\n";
}
} else {
jelem = "<"+name+jattr+" />\n";
}
return jelem;
};
XML.ObjTree.prototype.array_to_xml = function ( name, array ) {
var out = [];
for( var i=0; i<array.length; i++ ) {
var val = array[i];
if ( typeof(val) == "undefined" || val == null ) {
out[out.length] = "<"+name+" />";
} else if ( typeof(val) == "object" && val.constructor == Array ) {
out[out.length] = this.array_to_xml( name, val );
} else if ( typeof(val) == "object" ) {
out[out.length] = this.hash_to_xml( name, val );
} else {
out[out.length] = this.scalar_to_xml( name, val );
}
}
return out.join("");
};
// method: scalar_to_xml( tagName, text )
XML.ObjTree.prototype.scalar_to_xml = function ( name, text ) {
if ( name == "#text" ) {
return this.xml_escape(text);
} else {
return "<"+name+">"+this.xml_escape(text)+"</"+name+">\n";
}
};
// method: xml_escape( text )
XML.ObjTree.prototype.xml_escape = function ( text ) {
return (text + '').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
};
XML.ObjTree.prototype.writeXML=函数(树){
var xml=this.hash_to_xml(null,tree);
返回this.xmlDecl+xml;
};
XML.ObjTree.prototype.hash_to_XML=函数(名称,树){
var-elem=[];
var attr=[];
for(树中的变量键){
打印(“键:“+key+”\n”)
//打印(“树:“+tree[key]+'\n')
如果(!tree.hasOwnProperty(key))继续;
var val=树[键];
if(key.charAt(0)!=this.attr_前缀){
if(typeof(val)=“未定义”| | val==null){
元素[元素长度]=“”;
}else if(typeof(val)=“对象”&&val.constructor==数组){
elem[elem.length]=this.array_to_xml(key,val);
}else if(typeof(val)=“对象”){
elem[elem.length]=this.hash_to_xml(key,val);
}否则{
elem[elem.length]=this.scalar_to_xml(key,val);
}
}否则{
attr[attr.length]=“”+(key.substring(1))+“=”+(this.xml_escape(val))+”;
}
}
var jattr=attr.join(“”);
var jelem=elem.join(“”);
if(typeof(name)=“未定义”| | name==null){
//无标签
}否则如果(元素长度>0){
if(jelem.match(/\n/)){
jelem=“\n”+jelem+“\n”;
}否则{
jelem=“”+jelem+“\n”;
}
}否则{
jelem=“\n”;
}
返回杰勒姆;
};
XML.ObjTree.prototype.array_to_XML=函数(名称,数组){
var out=[];
对于(var i=0;i给你:
JSON:
{
"data:xxData": [
{ "xyz": "value" },
{ "abc": "order" }
]
}
}
您使用的“现有javascript代码”是什么?请提供此代码以便我们修复它。JSON对象中没有顺序。如果您需要任何顺序,您需要自己构建它并保存在某个位置(例如,在数组中)。我用此代码更新了我的原始帖子。非常感谢!(我无法从您的代码中分辨出来,因为您没有为array_to_xml()输入源代码,我在array_to_xml()中添加了array_)到原始帖子。我打印出树内容-它包含数据,但顺序与JSON字符串中的顺序不同。另外,您提到的JSON不是我想要的。您的JSON相关输出如下,但我希望所有元素都包含在一个数据中:xxData。使用JSON:value-ORDER–De输出v 35分钟ago@Dev-我明白了。我看不出有任何方法可以用这个转换代码生成这个xml,因为它会在数组的每个元素周围添加父元素。我不会这样转换为xml。