Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSONObject在节点js app中接收时不带引号_Java_Json_Node.js_Parsing_Socket.io - Fatal编程技术网

Java JSONObject在节点js app中接收时不带引号

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_

我正在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);
    }
}

发送到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'){…}