2017-09-07 105 views
0

我想创建一个API将PDF文件转换为JSON。我在解析pdf文件后得到的数据是用逗号分隔的值。我正在使用Nodejs pdf2json软件包。 数据什么我米解析PDF文件后得到:如何使用JavaScript将解析数据写入JSON文件?

"val a: 1, val b: 2, val c, vald: 3, 4, 5, 6, val e: 7," 

所需的输出:

{ 
"val a" : 1, 
"val b" : 2, 
"val c" : "", 
"vald" : "3,4,5,6", 
"val e": 7 
} 

我使用的代码:

var express = require('express'), 
 
    app = express(), 
 
    upload = require('express-fileupload'), 
 
    http = require('http').Server(app).listen(8080), 
 
    PDFParser = require("pdf2json"), 
 
    fs = require('fs'); 
 

 
console.log("Server started on port 8080"); 
 

 
//pdf parser 
 
let pdfParser = new PDFParser(this, 1); 
 

 

 
//express file uploader     
 
app.use(upload()); 
 

 
app.get("/", (req, res) => { 
 
    res.sendFile(__dirname + "/index.html"); 
 
}) 
 

 
app.post("/", (req, res) => { 
 
    if (req.files) { 
 
     var file = req.files.filename, 
 
      filename = file.name; 
 
     pdfParser.parseBuffer(file.data); 
 

 

 
     pdfParser.on("pdfParser_dataError", errData => console.error(errData.parserError)); 
 
     pdfParser.on("pdfParser_dataReady", pdfData => { 
 
      var output = JSON.stringify(pdfParser.getRawTextContent()).split(/\\r\\n/); 
 
      fs.writeFile('data2toJson.json', output, 'utf8'); 
 
      console.log("hellow" + Date()); 
 
     }); 
 

 
     res.send("done"); 
 
    } 
 
})
<form method="post" enctype="multipart/form-data" action="/"> 
 
    <input type="file" name="filename"> 
 
    <input type="submit" value="upload"> 
 
</form>

+0

你有什么发现?上述代码的结果是什么? – tgdn

+0

我在问题 – Vino

+0

中给出了上述代码的结果。对不起,我的太快读了 – tgdn

回答

0

我试着根据你的问题得到预期的输出灰。 尝试以下解决方案

希望这将让你去:)

注意:你应该尝试优化的解决方案来这样做。

var input = "val a: 1, val b: 2, val c, vald: 3, 4, 5, 6, val e: 7,"; 
 
var keys = input.match(/(val([a-z0-9\s]+):)|(val([a-z0-9\s]+),)/g) 
 
var output = {}; 
 
for (var i = 0; i < keys.length; i++) { 
 
    input = input.slice(keys[i].length); 
 
    if (i < keys.length - 1) 
 
    var val = input.substring(0, input.indexOf(keys[i + 1])); 
 
    else 
 
    var val = input; 
 
    input = input.slice(val.length); 
 
    val = val.trim(); 
 

 
    if (val.lastIndexOf(",") == val.length - 1) { 
 
    val = val.substr(0, val.length - 1) 
 
    } 
 
    output[keys[i].replace(":", "").replace(",", "")] = val; 
 
} 
 
console.log(output)

+0

感谢您的快速响应,我从您的代码中得到了一点想法,我使用了正则表达式和匹配方法而不是split,m仍然在处理问题,得到解决将更新在这里 – Vino

相关问题