Java JSONObject在节点js app中接收时不带引号
我正在Android应用程序和Node.js API之间使用Socket.IO。 我需要序列化一些对象,所以我必须在Android应用程序中使用JSONObject 问题在于,当接收每个对象服务器端时,JSON数据是不可解析的,因为“值”在其名称上缺少引号 客户端:Java JSONObject在节点js app中接收时不带引号,java,json,node.js,parsing,socket.io,Java,Json,Node.js,Parsing,Socket.io,我正在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_
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);
}
}
发送到NodeJS应用程序的JSON可能已经被解析 您可以通过检查其类型来确认:
console.log(typeof data);
如果输出是
object
,那么它已经被解析了。它不是已经被解析了吗?试试console.log(数据类型)
如果它输出object
,那么它已经被解析了。@victorkohl你是对的。这就是问题所在。我不知道Socket.IO会自动解析我的对象。@victorkohl,我将发布完整的代码,请发布您的答案,以便我可以接受。正如您所说,数据已经是解析过的JSON对象。您知道如何处理客户端发送格式错误的JSON的情况吗?您是否认为检查数据
的类型是否为对象将是确保JSON正常运行的一种良好做法?@MalteseFalcon我对SocketIO没有足够的经验,但是是的,您可以在对其执行任何操作之前检查数据
的类型。如果发送了格式错误的JSON,您可能会有一个字符串作为data
,或者在某个地方抛出异常,您将不得不处理此场景。谢谢,这就是我目前所做的<代码>如果(!newPosition | | typeof newPosition!=='object'){…}