JSON数据无法上传到数据库

时间:2015-06-24 11:33:09

标签: json node.js database cloudant nosql

我正在使用IBM Cloudant NoSQL数据库,我正在尝试在Node.js上传文档。首先读入文档(.xlsx)并将其转换为json:

xlsxj({

    input: "testdata/WHO_NREVSS.xlsx",
    output: "testdata/WHO_NREVSS.json"

      }, function(err, result) {
    if(err) {
      console.error(err);
    }else {

      // Read the file and send to the callback
      fs.readFile('./testdata/WHO_NREVSS.json', handleFile)

      //The callback function
      function handleFile(err, data) {
          if (err) throw err
          else{
            //data = data.replace( "\"", '\\"');
            obj = JSON.parse(data);

到目前为止一切正常。当我在console.log obj时,我得到一个充满json数据的数组:

[
{
  "H3N2v": "0",
  "REGION TYPE": "Census Regions",
  "REGION": "New England",
  "YEAR": "2007",
  "WEEK": "40",
  "timeline": "2007-40",
  "TOTAL SPECIMENS": "115",
  "PERCENT POSITIVE": "0",
  "A (H1)": "0",
  "A (Unable to Subtype)": "0",
  "A (H3)": "0",
  "2009 H1N1": "0",
  "A (Subtyping not Performed)": "0",
  "B": "0"
},...
]

现在,当我想在Cloudant上的文档中插入此数组时,看起来像这样......:

testdb.insert({"_id": "statistic", "data":obj}, function(error, result){
  if(error) {
    console.error(error);
  }else {
    console.log(JSON.stringify(obj));
  }
})

...我只得到一个带有“_id”和“_rev”的文档,但键“data”和值“obj”根本没有出现。为什么会这样? 当我手动(通过复制 - 粘贴)将数组插入cloudant时,它可以正常工作。

更新1: 当使用回调函数handleFile中的“data”时,我实际上在数据库中得到了一个结果,但它看起来像这样:

"data": [
91,
123,
34,
72,
51,
78,
...
]

虽然不应该。记录它给我的结果是“Buffer 5b 7b 22 48 33 ......”

通过在回调函数中移动整个'insert'部分来解决问题。现在它的工作方式应该有效。最终代码:

  fs.readFile('./testdata/WHO_NREVSS.json', handleFile)
  // Write the callback function
  function handleFile(err, data) {
      if (err) throw err
      else{
        obj = JSON.parse(data);

        testdb.insert({"_id": "statistic", "data":obj}, function(error, result){
          if(error) {
            console.error(error);
          }else {
            console.log(obj);
          }
        })

0 个答案:

没有答案