使用Javascript将XML转换为JSON(并返回)

使用Javascript将XML转换为JSON(并返回),javascript,jquery,xml,json,format-conversion,Javascript,Jquery,Xml,Json,Format Conversion,如何将XML转换为JSON,然后再转换回XML 以下工具工作得很好,但并不完全一致: 以前有人遇到过这种情况吗?我认为这是最好的: 请务必阅读,其中详细介绍了这些转换的问题,我认为您会发现这些问题很有启发性。O'Reilly主持这篇文章的事实应该表明Stefan的解决方案是有价值的。-my own library更新的URL来自: 该库提供XML到JSON JavaScript对象的转换函数,反之亦然。该库非常小,不需要任何其他附加库 API函数 新建X2JS-创建实例以访问所有库功能。您还可以

如何将XML转换为JSON,然后再转换回XML

以下工具工作得很好,但并不完全一致:


以前有人遇到过这种情况吗?

我认为这是最好的:

请务必阅读,其中详细介绍了这些转换的问题,我认为您会发现这些问题很有启发性。O'Reilly主持这篇文章的事实应该表明Stefan的解决方案是有价值的。

-my own library更新的URL来自:

该库提供XML到JSON JavaScript对象的转换函数,反之亦然。该库非常小,不需要任何其他附加库

API函数

新建X2JS-创建实例以访问所有库功能。您还可以在此处指定可选配置选项 X2JS.xml2json-将指定为DOM对象的XML转换为JSON X2JS.json2xml-将JSON转换为XML DOM对象 X2JS.xml_str2json-将指定为字符串的xml转换为JSON X2JS.json2xml_str-将JSON转换为XML字符串 网上演示


不久前,我为我的电视观察列表应用程序编写了这个工具,希望这也能有所帮助

Synopsys:一个库,不仅可以将xml转换为json,而且还可以轻松调试而不会出现循环错误,并将json重新创建为xml。特性:-将xml解析为json对象。将json对象打印回xml。可用于将IndexedDB中的xml保存为X2J对象。打印json对象


这些答案对我实现这一功能有很大帮助:

函数xml2jsonxml{ 试一试{ var obj={}; 如果xml.childrence.length>0{ 对于变量i=0;i Jquerythis.find'content'.eq0[0]
其中内容是我存储xml的字段。

使用服务器端作为客户端的最佳方法并不能在所有情况下都很好地工作。我试图使用javascript构建在线json-to-xml和xml-to-json转换器,我觉得这几乎是不可能的,因为它在所有场景中都不起作用。最终,我使用ASP.MVC中的Newtonsoft在服务器端完成了这项工作。这是我个人推荐的在线转换器。它是一个XML到JSON的转换器

它非常轻量级,使用纯JavaScript。它不需要依赖关系。您可以简单地将函数添加到代码中,并根据需要使用它

它还考虑了XML属性

var xml = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml); 

console.log(json); 
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’
这是一本书

免责声明:我已经写了

快速XML解析器可以帮助将XML转换为JSON,反之亦然。这是一个例子

var options = {
    attributeNamePrefix : "@_",
    attrNodeName: "attr", //default is 'false'
    textNodeName : "#text",
    ignoreAttributes : true,
    ignoreNameSpace : false,
    allowBooleanAttributes : false,
    parseNodeValue : true,
    parseAttributeValue : false,
    trimValues: true,
    decodeHTMLchar: false,
    cdataTagName: "__cdata", //default is 'false'
    cdataPositionChar: "\\c",
};
if(parser.validate(xmlData)=== true){//optional
    var jsonObj = parser.parse(xmlData,options);
}
如果您想将JSON或JS对象解析为XML,那么

//default options need not to set
var defaultOptions = {
    attributeNamePrefix : "@_",
    attrNodeName: "@", //default is false
    textNodeName : "#text",
    ignoreAttributes : true,
    encodeHTMLchar: false,
    cdataTagName: "__cdata", //default is false
    cdataPositionChar: "\\c",
    format: false, 
    indentBy: "  ",
    supressEmptyNode: false
};
var parser = new parser.j2xParser(defaultOptions);
var xml = parser.parse(json_or_js_obj);
“这是一个很好的工具,来自一个有文档记录且非常著名的npm库,它可以很好地进行xml js转换:与上面提出的一些或所有解决方案不同,它还可以转换xml注释

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);

我使用xmlToJson只是为了得到xml的一个值。 我发现,如果xml只出现一次,那么执行以下操作就容易多了

让xml= + ' 762384324' + “汉克”+ “石头”+ ; 让getXmlValue=functionstr,键{ 返回str.substring str.lastIndexOf+长度, str.lastIndexOf ; } alertgetXmlValuexml,“firstname”;//在6个简单的ES6行中返回Hank:

xml2json=xml=>{ var el=xml.nodeType==9?xml.documentElement:xml var h={name:el.nodeName} h、 content=Array.fromel.childNodes | |【】.filtere=>e.nodeType==3.mape=>e.textContent.join.trim h、 attributes=Array.fromel.attributes | |【】.filtera=>a.reduceh,a=>{h[a.name]=a.value;返回h},{} h、 children=Array.fromel.childNodes | |【】。filtere=>e.nodeType==1.mapc=>h[c.nodeName]=xml2jsonc 返回h } 测试w
对于echo xml2json_示例| node-r xml2json.es6,源代码位于

,我基于regex创建了一个递归函数,以防您不想安装库并理解发生的事情背后的逻辑:

const xmlSample='tag contentOther contentinside content'; console.logparseXmlToJsonxmlSample; 函数parseXmlToJsonxml{ const json={}; 对于xml的常量。matchAll/?:]***?:?!您也可以使用。它可以解析为由简单对象组成的DOM并进行字符串化。结果,内容将被修剪。因此,使用空格的原始格式将丢失。但这可以很好地用于缩小HTML

const xml = require('txml');
const data = `
<tag>tag content</tag>
<tag2>another content</tag2>
<tag3>
  <insideTag>inside content</insideTag>
  <emptyTag />
</tag3>`;

const dom = xml(data); // the dom can be JSON.stringified

xml.stringify(dom); // this will return the dom into an xml-string


免责声明:我是javascript中速度最快的xml解析器的作者。

库中有方法jsonToXmljson和xmlToJsonxml。使用它。

请解释不一致性,特别是将仅包含1个元素的JSON数组转换为xml。当您将其转换回JSON,而不是1个元素的数组时,它创建了对象literal。我通过使用$.isArray检查类型,并将其包装在数组中,如果!$.isArray.xml2json--从2013年2月15日14:25开始中断抛出500次,json2xml链接已中断。@ysrb插件示例在IE8中不起作用!感谢您的回复!在我的例子中,JSON是规范表示,XML仅用于XSLT..t使用它不是我的主意!:这只是在浏览器中。不适用于node.js或非浏览器环境。还有其他想法吗?关于@Jasonenizac对他的帖子的评论,我不确定这个链接如何帮助解决拥有一个对象而不是一个项目数组的问题……我发现如果你从json xml json开始,那么is库工作得很好,但如果您想要xml json xml,则存在可逆性问题,因为它添加了元数据xml元素,如,请注意,这是一个copyleft许可的解决方案。这只是在编写开源软件时的一个选项。您好,您是如何克服一个问题的,即如果对象中有一个对象,那么它就在对象中tteral,其中如果有n>1个对象,则有一个数组。这使得在模板中使用xml到json对象变得很困难…是的,您应该使用一些技巧,这取决于您对xml结构的了解,因为这里没有XSD。请使用…(asArray语法以数组顺序sample://xml string to json var xmlText=Succes访问您的节点sddsfgdgdgfd;var jsonObj=X2JS.xml\u str2json xmlText;alert jsonObj.MyOperation.test;alert jsonObj.MyOperation.test\u asArray[0];我的主要问题是,当我将json转换回xml时,json充满了额外的属性,而字符串xml版本保留了所有无用的东西。它有各种各样的逗号和空格……你能把你的示例提交给我检查一下吗it@kleopatra此链接指向将xml转换为json的工具。它不是引用,而是actu链接到资源。不确定我应该怎么做::D FXP不仅仅是XML 2 JSON转换器。请检查它的readme.github repo找不到6个简单行,加上来自xml2json@ShortFuse唯一的依赖项是xmldom,一个xml解析器。它不使用来自npm的xml2json,尽管名称是sameThis,这非常棒。工作起来就像一个rm!
const xml = require('txml');
const data = `
<tag>tag content</tag>
<tag2>another content</tag2>
<tag3>
  <insideTag>inside content</insideTag>
  <emptyTag />
</tag3>`;

const dom = xml(data); // the dom can be JSON.stringified

xml.stringify(dom); // this will return the dom into an xml-string