在 Node、js 应用程序中接收 Java JSONObject 时未引用它

Posted

技术标签:

【中文标题】在 Node、js 应用程序中接收 Java JSONObject 时未引用它【英文标题】:Java JSONObject is unquoted when receiving it in Node,js app 【发布时间】:2016-08-13 06:35:09 【问题描述】:

我在 android 应用和 Node.js API 之间使用 Socket.IO。 我需要序列化一些对象,所以我必须在我的 Android 应用程序中使用 JSONObject。

问题在于,在服务器端接收每个对象时,JSON 数据无法解析,因为“值”的名称中缺少引号。

客户:

obj = new JSONObject(); 

obj.put("lon", 2.1459905000000004);
obj.put("lat", 48.8367079);

服务器:

socket.on('position_changed', function(data, reply) 

    console.log(data);
    // Outputs  lon: 2.1459905000000004, lat: 48.8367079 
    // Expected  "lon": 2.1459905000000004, "lat": 48.8367079 

    try 
        newPosition = JSON.parse(data);
       catch (e) 
        console.log(e);
    

【问题讨论】:

不是已经解析了吗?尝试console.log(typeof data),如果它输出object,那么它已经被解析了。 @victorkohl 你是对的。这就是问题所在。我不知道 Socket.IO 会自动解析我的对象。 @victorkohl,我将发布完整代码,请发布您的答案,以便我接受。 【参考方案1】:

发送到 NodeJS 应用的 JSON 可能已经被解析了。

你可以通过检查它的类型来确认它:

console.log(typeof data);

如果输出是object,那么它已经被解析了。

【讨论】:

如你所说,数据已经是一个解析的 JSON 对象。你知道如何处理客户端发送格式错误的 JSON 的情况吗?您是否认为检查data 的类型是否为对象是确保JSON 正常的好习惯? @MalteseFalcon 我对 SocketIO 没有足够的经验,但是是的,您可以在对其执行任何操作之前检查 data 的类型。如果发送了格式错误的 JSON,您可能会得到一个字符串 data,或者在某处抛出异常,您将不得不处理这种情况。 谢谢,这就是我目前所做的。 if (!newPosition || typeof newPosition !== 'object') ...

以上是关于在 Node、js 应用程序中接收 Java JSONObject 时未引用它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中接收 socket.io 客户端事件?

Node.js 框架简介

Node.js 应用程序从 GET 请求到 API 接收到空响应

通过 Node.js 接收移动应用通知

在 Node.js 中接收电子邮件

Twilio 使用 Node.js 接收和回复 SMS