web-dev-qa-db-ja.com

Javascriptを使用してXMLをJSONに変換(および逆変換)する

XMLからJSONにどのように変換してからXMLに戻すのですか?

次のツールは非常にうまく機能しますが、完全に一貫しているわけではありません。

誰もこの状況に遭遇したことがありますか?

129
Jason Suárez

これが最良の方法だと思います: XMLとJSONの間の変換

必ず xml.com O'Reillyサイトの付随記事 を読んでください。これは、これらの変換に関する問題の詳細になります。 O'Reillyがこの記事をホストしているという事実は、Stefanのソリューションにメリットがあることを示しているはずです。

89
Josh Stodola

https://github.com/abdmob/x2js -自分のライブラリ( http://code.google.com/p/x2js/ からの更新されたURL):

このライブラリは、XMLからJSON(JavaScriptオブジェクト)およびその逆のJavaScript変換関数を提供します。ライブラリは非常に小さく、他の追加ライブラリを必要としません。

API関数

  • 新しいX2JS()-すべてのライブラリ機能にアクセスするためのインスタンスを作成します。また、ここでオプションの構成オプションを指定できます
  • X2JS.xml2json-DOMオブジェクトとして指定されたXMLをJSONに変換
  • X2JS.json2xml-JSONからXML DOMオブジェクトへの変換
  • X2JS.xml_str2json-文字列として指定されたXMLをJSONに変換する
  • X2JS.json2xml_str-JSONからXML文字列への変換

http://jsfiddle.net/abdmob/gkxucxrj/1/ のオンラインデモ

var x2js = new X2JS();
function convertXml2JSon() {
    $("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val())));
}

function convertJSon2XML() {
    $("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val())));
}

convertXml2JSon();
convertJSon2XML();
$("#convertToJsonBtn").click(convertXml2JSon);
$("#convertToXmlBtn").click(convertJSon2XML);
44
abdolence

これらの回答は、この機能を作成するのに非常に役立ちました。

function xml2json(xml) {
  try {
    var obj = {};
    if (xml.children.length > 0) {
      for (var i = 0; i < xml.children.length; i++) {
        var item = xml.children.item(i);
        var nodeName = item.nodeName;

        if (typeof (obj[nodeName]) == "undefined") {
          obj[nodeName] = xml2json(item);
        } else {
          if (typeof (obj[nodeName].Push) == "undefined") {
            var old = obj[nodeName];

            obj[nodeName] = [];
            obj[nodeName].Push(old);
          }
          obj[nodeName].Push(xml2json(item));
        }
      }
    } else {
      obj = xml.textContent;
    }
    return obj;
  } catch (e) {
      console.log(e.message);
  }
}

Jquery dom/xmlオブジェクトを渡す限り:私にとっては:

Jquery(this).find('content').eq(0)[0]

contentは、xmlを保存していたフィールドです。

20
Ryan Conrad

個人的に このツール をお勧めします。 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”}}’

オンラインデモ

3

しばらく前にこのツールを作成しました https://bitbucket.org/surenrao/xml2json 私のTV Watchlistアプリ用に、これも役立つことを願っています。

Synopsys:xmlをjsonに変換するだけでなく、デバッグ(循環エラーなし)およびjsonからxmlへの再作成が簡単なライブラリ。機能:-XMLをJSONオブジェクトに解析します。 JSONオブジェクトをxmlに出力します。 xmlをIndexedDBにX2Jオブジェクトとして保存するために使用できます。 JSONオブジェクトを出力します。

3
surya

CodVerterの XML to JSON および JSON to XML ツールを使用できます。
それはオンラインですが、非常に安全であり、あなたがすることはすべてローカルコンピューターで解釈され、サーバーに送り返されることはありません(それはangular SPAなので、変換は純粋なJavascriptを介して行われます)。
検証エラーメッセージは有益で正確です。

完全開示:私は開発者の一人です)。

JSON to XML Converterの例:enter image description here

XML to JSONコンバーターの例:enter image description here

1
jonathana

免責事項: fast-xml-parser と書きました

高速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);
1

ここ 'xml <-> js変換を非常によく行う文書化された非常に有名なnpmライブラリの優れたツール:上記の提案されたソリューションのいくつか(すべて)とは異なり、xmlコメントも変換します。

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

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

Xmlの単一の値を取得するためにxmlToJsonを使用していました。
[。

let xml =
'<person>' +
  ' <id>762384324</id>' +
  ' <firstname>Hank</firstname> ' +
  ' <lastname>Stone</lastname>' +
'</person>';

let getXmlValue = function(str, key) {
  return str.substring(
    str.lastIndexOf('<' + key + '>') + ('<' + key + '>').length,
    str.lastIndexOf('</' + key + '>')
  );
}


alert(getXmlValue(xml, 'firstname')); // gives back Henk
0
Nebulosar