在 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 客户端事件?