【问题标题】:xml2js - Error: key $ must not start with '$'xml2js - 错误:键 $ 不能以 '$' 开头
【发布时间】:2021-01-30 12:54:55
【问题描述】:

我正在使用这个 javascript 库 xml2js 将 XML 文件解析为 JSON 格式。这是代码:

const fs = require('fs');
const xml2js = require('xml2js');
const util = require('util');

const parser = new xml2js.Parser();

fs.readFile('data.xml', (err, data) => {
    parser.parseString(data, (err, result) => {
        var jsonFile = util.inspect(result, false, null, true);
        console.log(jsonFile);
        
    });
});

解析有效。但是有一个问题。 $ 符号作为字段添加。这是 XML 数据。

<?xml version="1.0" encoding="UTF-8"?><PFA><Entity id="123" action="add" date="31-Jul-2009"><ActiveStatus>Inactive</ActiveStatus></Entity></PFA>

生成的json如下:

{
  PFA: {
    Entity: [
      {
        '$': { id: '123', action: 'add', date: '31-Jul-2009' },
        ActiveStatus: [ 'Inactive' ]
      }
    ]
  }
}

当我尝试将其保存到 mongodb 时,出现错误Error: key $ must not start with '$'

const fs = require('fs');
const xml2js = require('xml2js');
const util = require('util');

const parser = new xml2js.Parser();

fs.readFile('data.xml', (err, data) => {
    parser.parseString(data, (err, result) => {
        var jsonFile = util.inspect(result, false, null, true);
        var MongoClient = require('mongodb').MongoClient;
        var url = "mongodb://localhost:27017/";

        MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("db");
        dbo.collection("entity").insertOne(result, function(err, res) {
            if (err) throw err;
            console.log("1 document inserted");
            db.close();
        });
        });        
    });
});

【问题讨论】:

    标签: javascript mongodb xml2js


    【解决方案1】:

    MongoDB 中不允许以 $ 开头的字段,因为该语法是为运算符保留的。同样,不允许在字段名称中使用点,因为它们用于文档遍历(点表示法)。

    您需要更改您尝试保留的数据。

    【讨论】:

    • 但是原始 xml 文件中没有 $ 符号。该符号是从 xml2js 库自动生成的
    • 哪个是你需要调整的。
    【解决方案2】:

    用这个配置解决了

    const parser = new xml2js.Parser({ mergeAttrs: true,   explicitArray: false});
    

    xml2js 的完整文档是here

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 2013-11-07
      • 2015-11-17
      • 2015-11-19
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      相关资源
      最近更新 更多