当前位置: 首页 > 面试题库 >

如果通过child_process从JSON发送JSON到Node的JSON太长了,该如何解决?

司徒池暝
2023-03-14
问题内容

我的Node和Python后端运行得很好,但是现在遇到一个问题,如果我从Python向后发送的JSON没有Node太长,它将被拆分为两个,而我在Node端的JSON.parse失败。

我该如何解决?例如,第一批剪辑在

... [1137.6962355826706, -100.78015825640887], [773.3834338399517, -198

第二个有剩余的几个条目

.201506231888], [-87276.575065248, -60597.8827676457], [793.1850250453127, 
-192.1674702207991], [1139.4465453979683, -100.56741252031816], 
[780.498416769341, -196.04064849430705]]}

我是否必须在节点侧为长JSON创建一些逻辑,还是我在Python侧遇到的某种缓冲问题,可以通过适当的设置来克服?这是我在python方面所做的一切:

outPoints, _ = cv2.projectPoints(inPoints, np.asarray(rvec), 
np.asarray(tvec), np.asarray(camera_matrix), np.asarray(dist_coeffs))

# flatten the output to get rid of double brackets per result before JSONifying
flattened = [val for sublist in outPoints for val in sublist]
print(json.dumps({'testdata':np.asarray(flattened).tolist()}))
sys.stdout.flush()

而在节点端:

// Handle python data from print() function
  pythonProcess.stdout.on('data', function (data){

    try {
      // If JSON handle the data
      console.log(JSON.parse(data.toString()));
    } catch (e) {
      // Otherwise treat as a log entry
      console.log(data.toString());
    }
  });

问题答案:

发出的数据已分块,因此,如果要解析a JSON,则需要加入所有块,并在endperform 上执行JSON.parse

默认情况下,在父Node.js进程与生成的子进程之间建立了stdin,stdout和stderr的管道。这些管道的容量有限(且特定于平台)。如果子进程超过该限制写入stdout而没有捕获输出,则子进程将阻塞等待管道缓冲区接受更多数据。

在Linux中,每个块都限于65536字节。

在2.6.11之前的Linux版本中,管道的容量与系统页面大小相同(例如,在i386上为4096字节)。从Linux
2.6.11开始,管道容量为65536字节

let result = '';
pythonProcess.stdout.on('data', data => {
    result += data.toString();
    // Or Buffer.concat if you prefer.
});

pythonProcess.stdout.on('end', () => {
    try {
      // If JSON handle the data
      console.log(JSON.parse(result));
    } catch (e) {
      // Otherwise treat as a log entry
      console.log(result);
    }
});


 类似资料:
  • 问题内容: 我正在执行一个Android程序,该程序应该将数据从平板电脑发送到PHP Web服务。发送JSON的代码: PHP Web服务: 我尝试了获取JSON的不同方法,但没有一个对我有用。也许StackOverflow的优秀人才可以帮助我解决这个问题,因为他们总是遇到我遇到的其他所有问题。 问题答案: 在注释部分,您似乎只希望将JSON发送到您的PHP脚本。通常,您将POST发布到PHP,然

  • 然而,当我通过UDP实现它时,我错过了这种方法

  • 问题内容: 我是Android的新手,所以关于android的知识还不是很多,好的,请讲到重点,我需要通过用户名和密码进行 登录 ,因为我必须通过JSON进行http requset并返回响应也将以JSON格式提供。所以任何人都可以帮助我。谢谢。 问题答案: 试试这个代码

  • 问题内容: 我想发送以下JSON文本 到Web服务并读取响应。我知道如何读取JSON。问题是上述JSON对象必须以变量名发送。 我该如何从android做到这一点?创建请求对象,设置内容标头等步骤是什么。 问题答案: Android没有用于发送和接收HTTP的特殊代码,您可以使用标准Java代码。我建议使用Android随附的Apache HTTP客户端。这是我用来发送HTTP POST的代码片段

  • 问题内容: 我有一个生成HTML内容的php脚本。有没有一种方法可以通过php脚本通过JSON将HTML内容发送回我的网页? 问题答案: 是的,您可以使用HTML字符串并根据需要对其进行转义。 请注意,在 JSON中,顶级项 必须 是数组或对象 (现在不再适用) ,不能仅仅是字符串。因此,您将需要创建一个对象并使HTML字符串成为该对象的属性(可能是唯一的属性),因此生成的JSON类似于:

  • 问题内容: 我想知道是否可以在POST请求中直接发送一个数组(未包装在字典中)。显然,该参数应获取以下内容的映射:[String:AnyObject]?但我希望能够发送以下示例json: 问题答案: 您可以使用JSON进行编码,然后自行构建。例如,在Swift 3中: