json到xml with xml2js Array elementname

时间:2017-04-28 06:26:50

标签: json xml xml2js

我正在使用xml2js节点将json对象转换为xml文件。我想在解析我的json时设置数组项元素名称

{
   "myValue": "1",
   "myItems": [
      "13",
      "14",
      "15",
      "16"
   ]
}

我希望它看起来像(并将“element”标签设置为“myItem”)

<root>
   <myItems>
      <element>13</element>
      <element>14</element>
      <element>15</element>
      <element>16</element>
   </myItems>
   <myValue>1</myValue>
</root>

但xml2js只是给我

<root>
      <myItems>13</myItems>
      <myItems>14</myItems>
      <myItems>15</myItems>
      <myItems>16</myItems>
      <myValue>1</myValue>
</root>

是否有任何选项可以设置或我需要以某种方式格式化我的json?能够设置“元素”标签名称?我今天有最新的xml2js更新。

2 个答案:

答案 0 :(得分:2)

尝试将您的JSON重新格式化为类似的内容。

{
   "myValue": "1",
   "myItems": {
      "myItem": [
        "13",
        "14",
        "15",
        "16"
      ]   
   }
}

答案 1 :(得分:0)

GitHug正在讨论这个问题:https://github.com/Leonidas-from-XIV/node-xml2js/issues/428

在@Stucco的回答的基础上,我做了一个简单的函数来将数组嵌套在一个所需的名称下:

    var item = {
        word: 'Bianca',
        vowels: [ 'i' ],
        bannedVowels: [ 'a' ],
        syllabs: [ 'Bian', 'ca' ],
        sounds: [ 'an' ]
    };

    var output = {};

    _.each(item, function(value, key) {
        // this is where the magic happens
        if(value instanceof Array)
            output[key] = {"item": value};
        else
            output[key] = value;
    })

    var builder = new xml2js.Builder({rootName: "item"});
    var xml = builder.buildObject(output);

上面的例子给出了这个XML:

<item>
    <word>Bianca</word>
    <vowels>
         <item>i</item>
    </vowels>
    <bannedVowels>
         <item>a</item>
    </bannedVowels>
    <syllabs>
         <item>Bian</item>
         <item>ca</item>
    </syllabs>
    <sounds>
         <item>an</item>
    </sounds>
</item>

但如果您的数组嵌套得更深,我的简单函数将需要调整。