首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从node.js调用python "json“结果中插入字符8192的随机逗号

从node.js调用python "json“结果中插入字符8192的随机逗号
EN

Stack Overflow用户
提问于 2016-10-13 18:28:22
回答 1查看 199关注 0票数 2

我是一个JS开发人员,正在学习python。这是我第一次尝试同时使用节点(v6.7.0)和python (v2.7.1)。我使用restify和python作为通向的桥梁。我的python脚本使用了一个RAKE NLP关键字提取包。

我不知道为什么我的返回数据在server.js中在字符8192处插入一个随机逗号,并且大约是。除了位置之外,没有任何模式;有时它位于对象键字符串的中间,其他时候在值中,另一些时候在分隔对象对的逗号之后。这完全破坏了返回数据上的JSON.parse()。示例输出如下。当我从python shell运行脚本时,不会发生这种情况。

我真的搞不懂为什么会发生这种事,有经验的开发人员有什么想法吗?

浏览器中的样本输出

代码语言:javascript
复制
[..., {...ate': 1.0, 'intended recipient': 4.,0, 'correc...}, ...]

python shell中的示例输出

代码语言:javascript
复制
[..., {...ate': 1.0, 'intended recipient': 4.0, 'correc...}, ...]

忽略了与以下文件中的对象转换和处理有关的任何差异。代码已经简化,以展示问题

server.js

代码语言:javascript
复制
var restify = require('restify');
var py = require('python-runner');

var server = restify.createServer({...});

server.get('/keyword-extraction', function( req, res, next ) {

    py.execScript(__dirname + '/keyword-extraction.py', {
        bin: '.py/bin/python'
    })
    .then( function( data ) {
        fData = JSON.parse(data); <---- ERROR
        res.json(fData);
    })
    .catch( function( err ) {...});

    return next();
});

server.listen(8001, 'localhost', function() {...});

keyword-extraction.py

代码语言:javascript
复制
import csv
import json
import RAKE

f = open( 'emails.csv', 'rb' )
f.readline() # skip line containing col names

outputData = []

try:
    reader = csv.reader(f)

    for row in reader:
        email = {}
        emailBody = row[7]

        Rake = RAKE.Rake('SmartStoplist.txt')

        rakeOutput = Rake.run(emailBody)        

        for tuple in rakeOutput:

            email[tuple[0]] = tuple[1]

        outputData.append(email)

finally:
    file.close()

    print( json.dumps(outputData))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 19:28:13

这看起来像一个与某个缓冲区大小有关的错误,因为8192是一个由两部分组成的函数。

这里的主要问题是准确地隔离故障发生的位置。如果我是在调试这个,我会

  1. 仔细观察json.dumps的输出,在位置8191的两边打印几个字符,最好是整数字符代码(unicode、ASCII或其他任何字符)。
  2. 如果这看起来不错,我将尝试将python脚本的输出作为文件捕获并直接在节点服务器中读取(即不要运行python脚本)。
  3. 如果这有效,那么创建一个python脚本,该脚本接受该文件并在不进行操作的情况下输出该文件,并让节点服务器执行该python脚本,而不是它现在使用的那个脚本。

这应该能帮助你找出问题在哪里发生。从注释中,我怀疑这本质上是一个您无法控制的bug,除非您能够增加python缓冲区的大小,以保证您的数据不会破坏缓冲区。8K很小,所以这可能是一个现实的解决方案。

如果这是不够的,那么您可以考虑处理节点服务器上的数据,以删除n * 8192上的每个字符,如果您可以持续地依赖它的话。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40028380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档