Node.js 使用节点JS将Oracle CLOB划分为多个JSON

Node.js 使用节点JS将Oracle CLOB划分为多个JSON,node.js,json,oracle,clob,Node.js,Json,Oracle,Clob,我正在尝试使用节点js将单个Oracle CLOB数据转换为多个JSON文件。我使用了oracledb.fetchAsString=[oracledb.CLOB]获取Oracle CLOB数据。这是我的节点js代码- const express = require ('express'); const app = express (); const port = 8080; const dbConfig = require ('./db.js'); const oracledb = requir

我正在尝试使用节点js将单个Oracle CLOB数据转换为多个JSON文件。我使用了
oracledb.fetchAsString=[oracledb.CLOB]
获取Oracle CLOB数据。这是我的节点js代码-

const express = require ('express');
const app = express ();
const port = 8080;
const dbConfig = require ('./db.js');
const oracledb = require ('oracledb');


app.get ('/', (req, res) => {
  var jsonstring;
  oracledb.getConnection (dbConfig, function (err, connection) {
    if (err) throw err;
    oracledb.fetchAsString = [ oracledb.CLOB ];
    connection.execute (
      'select topic from table',
      {},
      function (err, result) {
        if (err) { console.error(err.message); return; }
      if (result.rows.length === 0)
        console.error("No results");

      else {
        var clob = result.rows[0][0];
        console.log(clob);

      }
        });
      }
    );
  });

app.listen (port, () => console.log (`Example app listening on port ${port}!`));
这是我的控制台输出-

{"Data":[{"Country":"A","OrderNo":"1","Method":" indoor ","WorkOrderNo":"1","Zipcode":"3","OriginalTimeSlot":"2019-12-","CurrentTimeSlot":"2019-12-13","Status":"","WOCreationDate":"2019-11-09","ModifactionDate":"2019-12-11","Dispatch":{"Status":"00","DispatchUnit":[]},"Par":{"Parcel":[{"Active":true,"Weight":284.572,"Volume":0.68,"Trackingstatus":"","Number":"1"},{"Active":true,"Weight":5.396,"Volume":0.01,"Trackingstatus":"","Number":"16"},{"Active":true,"Weight":362.777,"Volume":0.831321,"Trackingstatus":"","Number":"162"}]},"TimeSlotId":"7a2bb6eb-b7a2-4033-8485-0df4015a3938"},{"Country":"B","OrderNo":"162570460","Method":"customer ","WorkOrderNo":"2","Zipcode":"2","OriginalTimeSlot":"2019-11-21","CurrentTimeSlot":"2019-11-21","Status":"90","WOCreationDate":"2019-11-17","ModifactionDate":"2019-12-11","Dispatch":{"Status":"20","DispatchUnit":[{"Unit":"017","Time":"2019-11-20"}]},"Par":{"Parcel":[{"Active":true,"Weight":12.271,"Volume":0.047,"Trackingstatus":"90","Number":"00935297810003971677"},{"Active":true,"Weight":14.668,"Volume":0.038042,"Trackingstatus":"90","Number":"00935297810003971684"}]},"TimeSlotId":"e3fe1936-64f9-42de-b2c4-0ddf00529720"}]}
现在我想从这个输出创建两个不同的JSON文件,如下所示-

JSONFILE1:

{"Country":"A","OrderNo":"1","Method":" indoor ","WorkOrderNo":"1","Zipcode":"3","OriginalTimeSlot":"2019-12-","CurrentTimeSlot":"2019-12-13","Status":"","WOCreationDate":"2019-11-09","ModifactionDate":"2019-12-11","Dispatch":{"Status":"00","DispatchUnit":[]},"Par":{"Parcel":[{"Active":true,"Weight":284.572,"Volume":0.68,"Trackingstatus":"","Number":"1"},{"Active":true,"Weight":5.396,"Volume":0.01,"Trackingstatus":"","Number":"16"},{"Active":true,"Weight":362.777,"Volume":0.831321,"Trackingstatus":"","Number":"162"}]},"TimeSlotId":"7a2bb6eb-b7a2-4033-8485-0df4015a3938"}
JSONFILE2:

{"Country":"B","OrderNo":"162570460","Method":"customer ","WorkOrderNo":"2","Zipcode":"2","OriginalTimeSlot":"2019-11-21","CurrentTimeSlot":"2019-11-21","Status":"90","WOCreationDate":"2019-11-17","ModifactionDate":"2019-12-11","Dispatch":{"Status":"20","DispatchUnit":[{"Unit":"017","Time":"2019-11-20"}]},"Par":{"Parcel":[{"Active":true,"Weight":12.271,"Volume":0.047,"Trackingstatus":"90","Number":"00935297810003971677"},{"Active":true,"Weight":14.668,"Volume":0.038042,"Trackingstatus":"90","Number":"00935297810003971684"}]},"TimeSlotId":"e3fe1936-64f9-42de-b2c4-0ddf00529720"}

我怎么能这样分开

获取数据后处理数据的代码示例如下:

const fs = require('fs');

// This is the data you said you had fetched
const clob = {"Data":[{"Country":"A","OrderNo":"1","Method":" indoor ","WorkOrderNo":"1","Zipcode":"3","OriginalTimeSlot":"2019-12-","CurrentTimeSlot":"2019-12-13","Status":"","WOCreationDate":"2019-11-09","ModifactionDate":"2019-12-11","Dispatch":{"Status":"00","DispatchUnit":[]},"Par":{"Parcel":[{"Active":true,"Weight":284.572,"Volume":0.68,"Trackingstatus":"","Number":"1"},{"Active":true,"Weight":5.396,"Volume":0.01,"Trackingstatus":"","Number":"16"},{"Active":true,"Weight":362.777,"Volume":0.831321,"Trackingstatus":"","Number":"162"}]},"TimeSlotId":"7a2bb6eb-b7a2-4033-8485-0df4015a3938"},{"Country":"B","OrderNo":"162570460","Method":"customer ","WorkOrderNo":"2","Zipcode":"2","OriginalTimeSlot":"2019-11-21","CurrentTimeSlot":"2019-11-21","Status":"90","WOCreationDate":"2019-11-17","ModifactionDate":"2019-12-11","Dispatch":{"Status":"20","DispatchUnit":[{"Unit":"017","Time":"2019-11-20"}]},"Par":{"Parcel":[{"Active":true,"Weight":12.271,"Volume":0.047,"Trackingstatus":"90","Number":"00935297810003971677"},{"Active":true,"Weight":14.668,"Volume":0.038042,"Trackingstatus":"90","Number":"00935297810003971684"}]},"TimeSlotId":"e3fe1936-64f9-42de-b2c4-0ddf00529720"}]};

for (const v of clob.Data) {
  const filename = "myfile" + v.Country + '.txt';
  fs.writeFileSync(filename, JSON.stringify(v) + '\n');
}

这将循环LOB数据中的
数据
数组,并根据每个数组条目中的国家名称构造一个文件名。

得到的结果是一个大的JSON字符串。首先,您需要将其解析为一个JavaScript对象,从那里,您可以轻松地使用该对象来获得所需的内容

const express = require('express');
const app = express();
const port = 8080;
const dbConfig = require('./db.js');
const oracledb = require('oracledb');


app.get('/', (req, res) => {
  var jsonstring;
  oracledb.getConnection(dbConfig, function (err, connection) {
    if (err) throw err;
    oracledb.fetchAsString = [oracledb.CLOB];
    connection.execute(
      'select topic from table',
      {},
      function (err, result) {
        if (err) { console.error(err.message); return; }
        if (result.rows.length === 0)
          console.error("No results");

        else {
          var clob = result.rows[0][0];
          console.log(clob);

          const obj = JSON.parse('clob', clob);

          const file1 = obj.data[0];
          console.log('file1', file1);

          const file2 = obj.data[1];
          console.log('file2', file2);
        }
      });
  }
  );
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));
我刚刚向您展示了如何获取所需的文件内容。如您所见,数据属性(一旦解析了JSON内容)是一个数组。您可以像我一样使用硬编码索引访问元素,也可以像Chris一样使用循环


如果您需要将内容写入Node.js服务器上的实际文件,那么Chris的回答应该会有所帮助。

在@ChristopherJones中可能会有一两条提示,我可以连接并从Oracle获取数据。由于CLOB数据是以字符串形式获取的,所以我无法对其进行分割。我可以对此提供帮助,但似乎有点不对劲。您的console.log是:
console.log(clob)。您的查询是:
从表中选择主题
。但是您的控制台输出以:
{“Data”:
开始。
数据从哪里来?@DanMcGhan它来自CLOB数据本身。公平地说,我会根据您的代码发布一个答案。。。